链接: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. Oracle使用记录

    1.连接数据库的方式 sqlplus system/system@127.0.0.1:1521/orcl #远程用户名密码连接 sqlplus dbsnmp/oracle; #本地用户名密码连接 sq ...

  2. Pycharm调试django项目时发现断点失效

    解决方法: 第一步: 第二步: 点击 Edit Configuration 第三步 : 点击 + 选择python 填写相关参数信息 或者 点击ok  完成配置  重启 IDE 注意   重启IDE ...

  3. alert警告框点击确定后自动提交表单

    转载于  :https://zhidao.baidu.com/question/619375120140398412.html 在页面中有多个input type="text"的文 ...

  4. css动画 自动打字,让你的文字飞舞起来

    自动打字的效果 非一般的炫酷 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  5. Java“被迫”退出争霸,Python继续霸占首位!老牌程序员:我不服

    2019年转眼已经接近尾声,如果盘点下2019年最火的语言,除了Python还能有谁?你心中的王者语言又是谁? 这一年Python风光无限 这一年JAVA走向右边 这一年,我们都很感慨,你呢? 关于P ...

  6. tomcat在win10系统中安装失败的问题,修改tomcat内存

    自己以前在其他系统上安装tomcat服务都没有问题,但是在win10系统上安装就经常出现问题,自己总结了一下安装步骤: 1.首先需要配置环境变量, CATALINA_HOME 2.修改service. ...

  7. 染色板QPlette

    QPalette::Window 背景颜色 QPalette::WindowText 文本颜色 QPalette::Background 同QPalette::Window QPalette::For ...

  8. 归并非递归、快排递归及非递归的C++实现及时间效率对比。。

    今天看剑指offer突然发现下学期都要去面试了,还没自己实现过快排非递归和归并非递归,这怎么能行呢,于是就写了一下. (虽然有点卡壳,又回去翻了下算导,还是顺利写出来了) 先放图: 一亿数据量: #p ...

  9. 解决linux乱码问题

    echo "LANG="zh_CN.UTF-8" >> /etc/sysconfig/i18n yum -y install kde-l10n-Chinese ...

  10. Could not set property of class with value There is no setter for property named

    检查entity中类的属性与MAPPER中的resultMap属性是否一致