BFS迷宫问题
链接:https://ac.nowcoder.com/acm/challenge/terminal
来源:牛客网
输入描述:
本题包含多组数据。
每组数据先输入两个数字N,M
接下来N行,每行M个字符,表示地图的状态。
数据范围:
2<=N,M<=500
保证有一个起点S,同时保证有一个终点E.
输出描述:
每组数据输出一行,如果小明能够从起点走到终点,那么输出Yes,否则输出No
输出
Yes
No 解题思路:经典BFD
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
inline int read() {int x=,f=;char c=getchar();while(c!='-'&&(c<''||c>''))c=getchar();if(c=='-')f=-,c=getchar();while(c>=''&&c<='')x=x*+c-'',c=getchar();return f*x;}
typedef long long ll;
const int maxn = 1e5+;
char a[][];
int vis[][];
struct node{
int x,y;
};
int d[][]={,,,-,,,-,};
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
node S;//记录起点
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
cin>>a[i][j];
if(a[i][j]=='S'){
S.x=i;
S.y=j;
}
}
}
int flag=;
memset(vis,,sizeof(vis));//清空标记数组
queue<node>q;//定义队列
q.push(S);//弹入起点
while(!q.empty()){
node temp=q.front();//判断
q.pop();//弹出站首
if(a[temp.x][temp.y]=='E'){
flag=;
break;
}
vis[temp.x][temp.y]=;
for(int i=;i<;i++){
node R;
R.x=temp.x+d[i][];
R.y=temp.y+d[i][];
if(R.x>=&&R.x<=n&&R.y>=&&R.y<=m&&vis[R.x][R.y]==&&a[R.x][R.y]!='#'){
vis[R.x][R.y]=;
q.push(R);//入栈等待判断
}
}
}
if(flag==){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return ;
}
AC代码2;
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
char map[][];
char s[];
bool vis[][];
struct Node{
int x,y;
};
int d[][]={,,,-,,,-,};
int main()
{
int N,M;
while(scanf("%d%d",&N,&M)!=EOF)
{
Node S;
gets(s);//getchar();
for(int i=;i<=N;i++){
for(int j=;j<=M;j++){
scanf("%c",&map[i][j]);
if(map[i][j]=='S'){
S.x=i;
S.y=j;
}
}
gets(s);
}
int flag=;
memset(vis,,sizeof(vis));
queue<Node>q;
q.push(S);
while(!q.empty())
{
Node temp=q.front();
q.pop();
if(map[temp.x][temp.y]=='E')
{flag=;break;}
vis[temp.x][temp.y]=;
for(int i=;i<;i++)
{
Node R;
R.x=temp.x+d[i][];R.y=temp.y+d[i][];
if(R.x<||R.y<||R.x>N||R.y>M) continue;
if(!vis[R.x][R.y]&&map[R.x][R.y]!='#')
{
vis[R.x][R.y]=;
q.push(R);
}
}
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return ;
}
BFS迷宫问题的更多相关文章
- bfs—迷宫问题—poj3984
迷宫问题 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20591 Accepted: 12050 http://poj ...
- uva 816 - Abbott's Revenge(有点困难bfs迷宫称号)
是典型的bfs,但是,这个问题的目的在于读取条件的困难,而不是简单地推断,需要找到一种方法来读取条件.还需要想办法去推断每一点不能满足条件,继续往下走. #include<cstdio> ...
- BFS迷宫搜索路径
#include<graphics.h> #include<stdlib.h> #include<conio.h> #include<time.h> # ...
- HDU2579(bfs迷宫)
Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- bfs迷宫
链接:https://ac.nowcoder.com/acm/contest/338/BSleeping is a favorite of little bearBaby, because the w ...
- 【OpenJ_Bailian - 2790】迷宫(bfs)
-->迷宫 Descriptions: 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不 ...
- ACM/ICPC 之 BFS-简单障碍迷宫问题(POJ2935)
题目确实简单,思路很容易出来,难点在于障碍的记录,是BFS迷宫问题中很经典的题目了. POJ2935-Basic Wall Maze 题意:6*6棋盘,有三堵墙,求从给定初始点到给定终点的最短路,输出 ...
- (BFS)poj2935-Basic Wall Maze
题目地址 题目与最基本的BFS迷宫的区别就是有一些障碍,可以通过建立三维数组,标记某个地方有障碍不能走.另一个点是输出路径,对此建立结构体时要建立一个pre变量,指向前一个的下标.这样回溯(方法十分经 ...
- 3299: [USACO2011 Open]Corn Maze玉米迷宫
3299: [USACO2011 Open]Corn Maze玉米迷宫 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 137 Solved: 59[ ...
随机推荐
- sublime 最常用的快捷键.gif
Ctrl+D 把光标放在文本上,按下⌘+ D将选择这个文本.多次按下⌘+ D则会增加匹配项 Alt+F3 会选中光标所在文本的所有匹配项 Ctrl+Shift+' 这是一个法宝,也许你希望所有的属性保 ...
- DRF分页
一.序列化 from rest_framework impost serializers from . models import * class GoodsSerializer(serializer ...
- SCROLLINFO结构详解
在刚开始使用SCROLLINFO结构时感觉很不顺手,尤其其中的成员fMask理解不太深刻,经过查询资料才理解一二. 在使用滚动条功能时,如果要设置它的范围和位置可以用以前的函数,例如:SetScrol ...
- gcc 简单使用笔记
编译生成可执行文件(bin文件): gcc test.c //默认生成可执行文件名为a.out 指定可执行文件名: gcc -o test test.c 编译生成目标文件(.o文件): gcc -c ...
- 【经典数据结构】B树与B+树的解释
本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html 前面讲解了平衡查找树中的2-3树以及其实现红 ...
- awk基本介绍
AWK 是一种用于处理文本的编程语言工具.awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/aw ...
- [经验] Java 使用 netty 框架, 向 Unity 客户端的 C# 实现通信[2]
在前一篇文章中, 我们实现了从Java netty 服务端到 unity 客户端的通讯, 但是在过程中也发现有一些问题是博主苦苦无法解决的, 但是还好终于有些问题还是被我找刀方法解决了, 现在把这些解 ...
- Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解
Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解 说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括 ...
- 面试问烂的 Spring AO,全文详解
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- SpringBoot踩坑记(HTTP 400 错误)
HTTP 400 错误 复现错误 ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里:原因:1)前端提交 ...