链接:https://ac.nowcoder.com/acm/challenge/terminal
来源:牛客网

小明现在在玩一个游戏,游戏来到了教学关卡,迷宫是一个N*M的矩阵。
小明的起点在地图中用“S”来表示,终点用“E”来表示,障碍物用“#”来表示,空地用“.”来表示。
障碍物不能通过。小明如果现在在点(x,y)处,那么下一步只能走到相邻的四个格子中的某一个:(x+1,y),(x-1,y),(x,y+1),(x,y-1);
小明想要知道,现在他能否从起点走到终点。

输入描述:

本题包含多组数据。
每组数据先输入两个数字N,M
接下来N行,每行M个字符,表示地图的状态。
数据范围:
2<=N,M<=500
保证有一个起点S,同时保证有一个终点E.

输出描述:

每组数据输出一行,如果小明能够从起点走到终点,那么输出Yes,否则输出No
示例1

输入

复制

3 3
S..
..E
...
3 3
S##
###
##E

输出

复制

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迷宫问题的更多相关文章

  1. bfs—迷宫问题—poj3984

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20591   Accepted: 12050 http://poj ...

  2. uva 816 - Abbott&#39;s Revenge(有点困难bfs迷宫称号)

    是典型的bfs,但是,这个问题的目的在于读取条件的困难,而不是简单地推断,需要找到一种方法来读取条件.还需要想办法去推断每一点不能满足条件,继续往下走. #include<cstdio> ...

  3. BFS迷宫搜索路径

    #include<graphics.h> #include<stdlib.h> #include<conio.h> #include<time.h> # ...

  4. HDU2579(bfs迷宫)

    Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  5. bfs迷宫

    链接:https://ac.nowcoder.com/acm/contest/338/BSleeping is a favorite of little bearBaby, because the w ...

  6. 【OpenJ_Bailian - 2790】迷宫(bfs)

    -->迷宫  Descriptions: 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不 ...

  7. ACM/ICPC 之 BFS-简单障碍迷宫问题(POJ2935)

    题目确实简单,思路很容易出来,难点在于障碍的记录,是BFS迷宫问题中很经典的题目了. POJ2935-Basic Wall Maze 题意:6*6棋盘,有三堵墙,求从给定初始点到给定终点的最短路,输出 ...

  8. (BFS)poj2935-Basic Wall Maze

    题目地址 题目与最基本的BFS迷宫的区别就是有一些障碍,可以通过建立三维数组,标记某个地方有障碍不能走.另一个点是输出路径,对此建立结构体时要建立一个pre变量,指向前一个的下标.这样回溯(方法十分经 ...

  9. 3299: [USACO2011 Open]Corn Maze玉米迷宫

    3299: [USACO2011 Open]Corn Maze玉米迷宫 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 137  Solved: 59[ ...

随机推荐

  1. P2141珠心算测验题解

    先来看一下题目:某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法.他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和? 这 ...

  2. 页面在谷歌浏览器和IE浏览器顶部多出空白行,火狐显示正常

    引起这个问题的原因是用系统自带记事本打开过Tinkphp的模板文件,因为记事本不支持UTF8无BOM格式编码,打开之后这个编码格式丢失,转为ANSI格式的编码了: 解决的办法是:用Notepad++或 ...

  3. 7_6 带宽(UVa140)<回溯法:最优性剪枝>

    给定一个图(V,E),其中V为顶点的集合,E为边的集合,属于VxV.给定V中元素的一种排序,那么顶点v的带宽定义如下:在当前给定的排序中,与v距离最远的且与v有边相连的顶点与v的距离.给定排序的带宽定 ...

  4. 设置datagridview 单个单元格的背景色

    方法一: private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e){DataG ...

  5. Bugku-CTF加密篇之affine(y = 17x-8 flag{szzyfimhyzd})

    affine y = 17x-8 flag{szzyfimhyzd} 答案格式:flag{*} 来源:第七届山东省大学生网络安全技能大赛  

  6. html标签的快捷

    https://www.jianshu.com/p/8f330e3571ee 一: <ul> <li><a href=""></a> ...

  7. 【资源分享】Half-Life(半条命)中英版

    *----------------------------------------------[下载区]----------------------------------------------* ...

  8. RAID 5+备份硬盘实验:mdadm

    *独立冗余磁盘阵列---RAID5* RAID5+备份盘: 把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中.  RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中, 而是存储 ...

  9. C 语言实例 - 约瑟夫生者死者小游戏

    30 个人在一条船上,超载,需要 15 人下船. 于是人们排成一队,排队的位置即为他们的编号. 报数,从 1 开始,数到 9 的人下船. 如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了 ...

  10. 基于Robot Framework的接口自动化测试

    Robot Framework框架简介 Robot Framework框架是一个通用的验收测试和验收测试驱动开发的自动化测试框架(ATDD),使用的是关键字驱动的测试方法.它本身拥有强大的标准库,此外 ...