#2612:Find a way(BFS搜索+多终点)

第一次解决双向BFS问题,拆分两个出发点分BFS搜索
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn = 210;
char city[maxn][maxn];
bool visited[maxn][maxn];
int yx, yy, mx, my; //两人的起始点
int kfc[maxn][maxn]; //到达第i,j位置的kfc所需花费的时间(确保该地有kfc)
int action[][2] = { {1,0}, {-1,0}, {0,1}, {0,-1} };
int n, m;
struct Node {
int x, y, steps;
Node(int xx, int yy, int ss) :x(xx), y(yy), steps(ss) { }
};
queue<Node> q[2]; //分别表示两人
void Bfs(int p)
{
memset(visited, 0, sizeof(visited)); //初始化
if (p == 0) {
q[p].push(Node(yx, yy, 0));
visited[yx][yy] = 1;
}
else {
q[p].push(Node(mx, my, 0));
visited[mx][my] = 1;
}
while (!q[p].empty()) {
Node cur = q[p].front();
q[p].pop();
//扩展cur
for (int i = 0; i < 4; i++) {
int sx = cur.x + action[i][0], sy = cur.y + action[i][1];
//为.路(MY也视为路)
if ((sx > 0 && sx <= n && sy > 0 && sy <= m) && !visited[sx][sy] && (city[sx][sy] == '.' || city[sx][sy] == 'M' || city[sx][sy] == 'Y')) {
q[p].push(Node(sx, sy, cur.steps + 1));
visited[sx][sy] = 1;
}
//为@kfc
else if ((sx > 0 && sx <= n && sy > 0 && sy <= m) && !visited[sx][sy] && city[sx][sy] == '@') {
kfc[sx][sy] += cur.steps + 1; //两人步数之和
q[p].push(Node(sx, sy, cur.steps + 1)); //@同样要入队列
visited[sx][sy] = 1;
}
}
}
}
int main()
{
while (scanf("%d%d", &n, &m) != EOF) {
memset(kfc, 0, sizeof(kfc)), memset(city, '#', sizeof(city));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
scanf(" %c", &city[i][j]);
if (city[i][j] == 'Y') yx = i, yy = j;
else if (city[i][j] == 'M') mx = i, my = j;
}
Bfs(0);
Bfs(1);
int ans = 1 << 30; //从各个kfc路径中选出最短的
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (kfc[i][j] != 0 && kfc[i][j] < ans) ans = kfc[i][j];
printf("%d\n", ans * 11);
}
return 0;
}
#2612:Find a way(BFS搜索+多终点)的更多相关文章
- HDU 2612 (BFS搜索+多终点)
题目链接: http://poj.org/problem?id=1947 题目大意:两人选择图中一个kfc约会.问两人到达时间之和的最小值. 解题思路: 对于一个KFC,两人的BFS目标必须一致. 于 ...
- hdu 1240:Asteroids!(三维BFS搜索)
Asteroids! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- BFS搜索
参考博客:[算法入门]广度/宽度优先搜索(BFS) 适用问题:一个解/最优解 重点:我们怎么运用队列?怎么记录路径? 假设我们要找寻一条从V0到V6的最短路径.(明显看出这条最短路径就是V0-> ...
- hiho_1139_二分+bfs搜索
题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值. 题目链接:二分 最小化最大值,考虑采用二分搜索.对所有的边长进 ...
- hdu--1026--Ignatius and the Princess I(bfs搜索+dfs(打印路径))
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- Horse Pro(带负坐标的bfs搜索)
Horse Pro bfs搜索,但图中存在负值坐标,两种方法解决. 用数组标记,将原点设为300,300 用map标记 http://oj.jxust.edu.cn/contest/Problem?i ...
- 天梯赛练习 L3-008 喊山 (30分) bfs搜索
题目分析: 本题是一题比较简单的bfs搜索题,首先由于数据给的比较多不能直接开二维数组存放,而是用了vector的动态的二维数组的形式存放,对于每个出发点,我们bfs向四周搜索,标记搜索过的点,遇到搜 ...
- HDU - 2612 Find a way(BFS搜索)
题目: 链接 思路: 用BFS分别以‘Y’和‘M’的位置为起点进行两次搜索,并把这两次的搜索结果在一个二维数组中保存下来,在对地图遍历遇到‘@’更行最小值. PS: 如果用‘Y’和‘M’点分别去搜每个 ...
- poj 3083 Children of the Candy Corn 【条件约束dfs搜索 + bfs搜索】【复习搜索题目一定要看这道题目】
题目地址:http://poj.org/problem?id=3083 Sample Input 2 8 8 ######## #......# #.####.# #.####.# #.####.# ...
- HDU 2364 (记忆化BFS搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2364 题目大意:走迷宫.从某个方向进入某点,优先走左或是右.如果左右都走不通,再考虑向前.绝对不能往 ...
随机推荐
- java把数据批量插入iotdb
package com.xlkh.kafka; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson ...
- 运维初级实践——Linux系统命令教程
区块链运维工程师在Linux环境中常用的命令.快捷键,以及安装软件和文件管理的最佳实践. 1. 常用Linux命令 1.1 文件和目录操作 ls:列出目录内容 cd:更改目录 mkdir:创建新目录 ...
- Bert-vits2新版本V2.1英文模型本地训练以及中英文混合推理(mix)
中英文混合输出是文本转语音(TTS)项目中很常见的需求场景,尤其在技术文章或者技术视频领域里,其中文文本中一定会夹杂着海量的英文单词,我们当然不希望AI口播只会念中文,Bert-vits2老版本(2. ...
- 用元编程来判断STL类型
在此之前,先来回顾元编程当中的一个重要概念. template<typename _Tp, _Tp __v> struct integral_constant { static con ...
- [THUPC 2023 初赛] 快速 LCM 变换
题目描述 小 I 今天学习了快速最小公倍数变换(Fast Least-Common-Multiple Transform, FLT),于是他想考考你. 给定一个长度为 \(n\) 的正整数序列 \(r ...
- 一招MAX降低10倍,现在它是我的了
一.背景 性能优化是一场永无止境的旅程. 到家门店系统,作为到家核心基础服务之一,门店C端接口有着调用量高,性能要求高的特点. C端服务经过演进,核心接口先查询本地缓存,如果本地缓存没有命中,再查询R ...
- MinIO客户端之head
MinIO提供了一个命令行程序mc用于协助用户完成日常的维护.管理类工作. 官方资料 mc head 查看对象的前N行内容,N默认为10,命令如下: ./mc head local1/bkt1/doc ...
- DNS解析中CNAME和MX记录冲突
转载:DNS中CNAME和MX记录的冲突 在DNS解析中,CNAME记录与其他记录往往是互斥的.最常见的是CNAME记录和MX记录的互斥.例如我们在http://example.com部署官网,通过C ...
- JAVAEE基础知识
JAVAEE基础知识 2018年3月,开源组织Eclipse基金会宣布,JavaEE(Enterprise Edition)被更名为JakartaEE,也就是9版本后改名Jakarta EE,也就是J ...
- MySQL进阶篇:详解存储引擎特点
MySQL进阶篇:第一章_一.四_存储引擎特点_Memory & MySQL存储引擎的区别及特点 1.1 存储引擎特点 1.1.3 Memory 1). 介绍 Memory引擎的表数据时存储在 ...