G - Find a way

news2024/9/24 9:23:38

 


题目分析

        1.双重bfs,遍历两个起点求最短路再计算总和即可

        2.唯一的坑点在于对于一个KFC,两人中可能有一个到不了,所以还要对到不了的点距离做处理


#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 220;

struct pos{
    int y, x;
}Y, M;

char g[N][N];
bool vis[N][N];
int disy[N][N];
int dism[N][N];
int t1, t2;

int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};

void bfs1()
{
    memset(vis, 0, sizeof vis);
    queue<pos> q;
    q.push(Y);
    vis[Y.y][Y.x] = 1;
    while(!q.empty())
    {
        pos temp = q.front(); q.pop();
        for(int i = 0; i < 4; i++)
        {
            int a = temp.x + dx[i]; int b = temp.y + dy[i];
            if(a < 1 || b < 1 || a > t2 || b > t1) continue;
            if(!vis[b][a] && g[b][a] != '#')
            {
                vis[b][a] = 1;
                q.push({b, a});
                disy[b][a] = disy[temp.y][temp.x] + 1;
            }
        }
    }
        
                for(int i = 1; i <= t1; i++)
                {
                    for(int j = 1; j <= t2; j++)
                    {
                        if(disy[i][j] == 0) disy[i][j] = 1e7;
                    }
                }
}

void bfs2()
{
    memset(vis, 0, sizeof vis);
    queue<pos> q;
    q.push(M);
    vis[M.y][M.x] = 1;
    
    while(!q.empty())
    {
        pos temp = q.front(); q.pop();
        for(int i = 0; i < 4; i++)
        {
            int a = temp.x + dx[i]; int b = temp.y + dy[i];
            if(a < 1 || b < 1 || a > t2 || b > t1) continue;
            if(!vis[b][a] && g[b][a] != '#')
            {
                vis[b][a] = 1;
                q.push({b, a});
                dism[b][a] = dism[temp.y][temp.x] + 1;
            }
        }
    }
    
        for(int i = 1; i <= t1; i++)
        {
            for(int j = 1; j <= t2; j++)
            {
                if(dism[i][j] == 0) dism[i][j] = 1e7;
            }
        }
        
}

int main()
{
    while(scanf("%d %d", &t1, &t2) != EOF)
    {
        memset(disy, 0, sizeof disy);
        memset(dism, 0, sizeof dism);
        for(int i = 1; i <= t1; i++) 
            for(int j = 1; j <= t2; j++)
            {
                scanf(" %c", &g[i][j]);
                if(g[i][j] == 'Y') Y.x = j, Y.y = i;
                else if(g[i][j] == 'M') M.x = j, M.y = i;
            }
        
        bfs1();
        bfs2();
        
       int ans = 999;
        for(int i= 1; i <= t1; i++)
        {
            for(int j= 1; j <= t2; j++)
            {
                if(g[i][j] == '@') ans = min(ans, disy[i][j] + dism[i][j]);
            }
        }
        printf("%d\n", ans * 11);
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1534270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[python]bar_chart_race绘制动态条形图

最近在 B 站上看到了一个宝藏 up 主&#xff0c;名叫 "Jannchie见齐"&#xff0c;专门做动态条形图相关的数据可视化。 可以看到做出的效果还是很不错的&#xff0c;但工具使用的是 JS&#xff0c;不是 Python&#xff0c;于是尝试搜索了一下&#xff0c;看看 Python…

读取pdf文件转为txt文件,使用正则表达式删除页码

通过下述链接中的代码python 读取pdf中的文本&#xff0c;读取pdf的文字到txt文本中。 txt文本中&#xff0c;包含pdf的页码信息&#xff0c;使用如下代码删除pdf的页码 下述是包含页码信息的一段文本&#xff0c;在其中给出了4中不同格式的页码信息。 text ""&qu…

机器视觉学习(四)—— 图像的色彩

目录 一、图像的基础知识 二、NumPy模块 三、图像色彩变化 3.1 RGB图像的分通道显示 3.2 HSV图像的分通道显示 一、图像的基础知识 总结的笔记&#xff1a; """ 二值图: 每个像素取值 0或1,图像显示出来只有黑白色; 黑色:0 白色:1 灰度图: …

CSDN学习笔记总索引(2024)——我的创作纪念日(1024)

从2021-05-21至2024-03-21&#xff0c;我的CSDN博文学习笔记中&#xff0c;收集并展示浏览阅读&#xff0c;点赞收藏评论等数据&#xff0c;以浏览阅读量排逆序展示。 (笔记模板由python脚本于2024年03月21日 10:07:07创建&#xff0c;本篇笔记适合熟悉Python&#xff0c;对其基…

spring boot3登录开发-2(2短信验证码接口实现)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 上文衔接 内容简介 短信验证码接口实现 1.依赖导入 2.接口分析 3.实现思路 3.功能实现 创建发送短信…

PTA L2-041 插松枝 代码附注释

人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; 每人手边有一只小盒子&#xff0c;初始状态为空。每人面前有用不完的松枝干和一个推送器&#xff0c;每次推送一…

一些刷题需要用的大数据

无符号版本和有符号版本的区别就是有符号类型需要使用一个bit来表示数字的正负。 如果需声明无符号类型的话就需要在类型前加上unsigned。 整型的每一种都分为&#xff1a;无符号&#xff08;unsigned&#xff09;和有符号&#xff08;signed&#xff09;两种类型&#xff08;f…

【小沐学AI】Google AI大模型的一点点学习(Python)

文章目录 1、Google AI简介1.1 Google AI Studio1.2 Bard1.3 PaLM1.4 Gemini1.5 Gemini API1.6 Vertex AI1.7 Gemma 2、Google AI开发2.1 快速入门2.1.1 配置开发环境2.1.2 列出所有模型2.1.3 从文本输入生成文本2.1.4 从图像和文本输入生成文本2.1.5 聊天对话 结语 1、Google …

(vue)新闻列表与图片对应显示,体现选中、移入状态

(vue)新闻列表与图片对应显示&#xff0c;体现选中、移入状态 项目背景&#xff1a;郑州院XX项目首页-新闻展示模块&#xff0c;鼠标移入显示对应图片&#xff0c;且体现选中和移入状态 首次加载&#xff1a; 切换列表后&#xff1a; html: <el-row :gutter"20"…

k8s系列之十五 Istio 部署Bookinfo 应用

Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖&#xff0c;但是构成了一个有代表性的服务网格的例子&#xff1a;它由多个服务、多个语言构成&#xff0c;并且 reviews 服务具有多个版本。 该应用由四个单独的微服务构成。 这个应用模仿在线书…

javaSwing日记管理系统

一、简介 使用 Java Swing 开发日记管理系统 在今天的博客中&#xff0c;我将向您介绍如何使用 Java Swing 开发一个简单而功能强大的日记管理系统。这个系统将具有登录、注册、找回密码、写日志以及切换主题等功能。我们将使用 MySQL 数据库来存储用户信息和日记内容。 二、…

Springboot集成shiro框架

前言 以前的项目代码&#xff0c;整理记录一下。 一、什么是shiro 官方&#xff1a;Shiro是一个功能强大且易于使用的Java安全框架&#xff0c;可以运行在JavaSE和JavaEE项目中&#xff0c;可执行身份验证、授权、加密和会话管理。 二、Shiro核心组件 1、UsernamePasswordT…

面试真经(运维工程师)

1.熟悉的排序算法有哪些&#xff0c;它们的时间空间复杂度如何? 排序算法主要分为内部排序和外部排序。内部排序指的是数据记录在内存中进行排序&#xff0c;而外部排序则适用于排序的数据量很大&#xff0c;一次不能容纳全部排序记录的情况&#xff0c;需要在排序过程中访问…

【爬虫】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 爬虫 目录&#xff1a; &#xff08;一&#xff09;web自动化和接口自动化 &#xff08;二&#xff09;实战-爬取Boss直聘信息数据

为什么物联网网关需要边缘计算能力?边缘计算应用场景有哪些?

【前言】本篇为物联网硬件系列学习笔记&#xff0c;分享学习&#xff0c;欢迎评论区交流~ 什么是边缘计算&#xff1f; 边缘计算&#xff08;Edge Computing&#xff09;是一种分布式计算范式&#xff0c;旨在将计算和数据存储功能放置在接近数据源或终端设备的边缘位置&#…

一代大神跌落神坛——Java炸了!

曾经它是只手遮天的一大计算机语言.......可现如今&#xff0c;腹背受敌、大势已去&#xff0c;一代神话跌落神坛&#xff01; Java薪水20k降至15k难掩颓势&#xff0c;事业编3k升至3500尽显嫡道风范&#xff01;嫡嫡道道、嫡嫡道道~ 没错&#xff0c;就是它&#xff01;Java…

【C语言】模拟实现 atoi

文章目录 atoi()函数模拟实现思路分析代码呈现 atoi()函数 通过上述cplusplus和MSDN对atoi函数的介绍我们可以得出以下几个关键点 库函数&#xff1a; <stdlib.h>形参&#xff1a;const char * str返回值&#xff1a; int作用&#xff1a;atoi函数是将一个字符串转化成一…

运维篇SHELL脚本实战案例

统计出每个IP的访问量有多少&#xff1f; 检查是否提供了日志文件的路径作为参数。使用awk从日志文件的每行中提取第一个字段&#xff08;假设这是IP地址&#xff09;。使用sort对提取的IP地址进行排序。使用uniq -c统计每个唯一IP地址的出现次数。最后&#xff0c;使用sort -…

Python模块-基础知识

Python模块-基础知识 1.模块分类&#xff1a; &#xff08;1&#xff09;自定义模块&#xff1a; 如果你自己写一个py文件&#xff0c;在文件内写入一堆函数&#xff0c;则它被称为自定义模块&#xff0c;即使用python编写的.py文件 &#xff08;2&#xff09;第三方模块&…

从0到1:Java构建高并发、高可用分布式系统的实战经验分享

文章目录 引言基础架构选择与设计微服务架构分布式储存与计算 高并发处理策略异步处理与消息队列并发控制与资源隔离 高可用性设计与故障恢复冗余与集群化容错与自我修复监控与运维自动化 引言 随着互联网业务的快速发展和技术迭代升级&#xff0c;作为Java架构师&#xff0c;…