Description

AC小公主很喜欢设计迷宫,她设计的迷宫只有两个口,一个入口,一个出口。但小公主有时候很调皮,她会让挑战者走不出迷宫。现在给你AC小公主的迷宫请你判断挑战者能否成功从出口走出迷宫,迷宫包证边界为障碍物,只有两个不同的入口。
“#”代表障碍物,“*”代表可走的路。

Input

输入有多组,每组输入两个正整数n,m( 2 < n < m < 1000)。
接下来n行,每行有m个字符。

Output

每组测试实例,若挑战者能走出迷宫输出”YES”,否则输出“NO”。

Sample Input

3 3
#*#
#*#
#*#
3 3
#*#
###
#*#

Sample Output

YES
NO

AC代码:

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std; char str[][];
bool flag[][];
int dri[][]= {{-,},{,},{,-},{,}};
struct Door
{
int x,y;
} door[]; int bfs(int n,int m)
{
memset(flag,false,sizeof(flag));
queue<Door>q;
Door now,next;
q.push(door[]);
flag[door[].x][door[].y]=true;
while(!q.empty())
{
now=q.front();
q.pop();
if(now.x==door[].x && now.y==door[].y) return ;
for(int i=; i<; i++)
{
next.x=now.x+dri[i][];
next.y=now.y+dri[i][];
if(next.x>=&&next.x<n && next.y>=&&next.y<m && next.x==door[].x && next.y==door[].y) return ;
else if(next.x>=&&next.x<n && next.y>=&&next.y<m && !flag[next.x][next.y] && str[next.x][next.y]=='*')
{
q.push(next);
flag[next.x][next.y]=true;
}
}
}
return -;
} int main()
{
int n,m,i;
while(scanf("%d%d",&n,&m)==)
{
getchar();
for(i=; i<n; i++)
scanf("%s",str[i]);
int num=;
for(i=; i<m; i++)
{
if(str[][i]=='*')
{
door[num].x=;
door[num].y=i;
num++;
}
if(str[n-][i]=='*')
{
door[num].x=n-;
door[num].y=i;
num++;
}
}
for(i=; i<n-; i++)
{
if(str[i][]=='*')
{
door[num].x=i;
door[num].y=;
num++;
}
if(str[i][m-]=='*')
{
door[num].x=i;
door[num].y=m-;
num++;
}
}
int ans=bfs(n,m);
if(ans==) printf("YES\n");
if(ans==-) printf("NO\n");
}
return ;
}

nefu558 bfs的更多相关文章

  1. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  2. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  3. POJ 3278 Catch That Cow(bfs)

    传送门 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 80273   Accepted: 25 ...

  4. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  5. Sicily 1215: 脱离地牢(BFS)

    这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...

  6. Sicily 1048: Inverso(BFS)

    题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...

  7. Sicily 1444: Prime Path(BFS)

    题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...

  8. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  9. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

随机推荐

  1. 谷歌 Uncaught SecurityError: Failed to execute 'replaceState' on 'History 错误

    今天在用sui mobil做一个内联页面的时候遇到了这个问题. 然而这个问题只出现在chrome浏览器中,在火狐中没有一点问题. 他说明的是一个安全问题,chrome中有了新的安全机制

  2. AIX系统中安装Java6全过程(全部)

    ====================================================   From: GCG TSC pSeries <ibm800p@cn.ibm.com& ...

  3. 【python】词法语法解析模块ply

    官方手册:http://www.dabeaz.com/ply/ply.html 以下例子都来自官方手册: 以四则运算为例: x = 3 + 42 * (s - t) 词法分析: 需要将其分解为: 'x ...

  4. mac系统下如何解压.car文件

    纯手打: 1.去github下载demo然后运行  github地址:https://github.com/steventroughtonsmith/cartool 2.找到项目下cartool的位置 ...

  5. java调用cmd命令删除文件夹及其所有内容

    /** * *删除D盘下面test目录,感觉以前用io流遍历删除好慢! * **/ public static void main(String[] args) { Runtime run = Run ...

  6. EVE ToDo

    1. 打捞无人机 2. 无人机命中

  7. python简介

    python起源 作者Guido van Rossum,荷兰人 在创建python之初,1989年12月份,Guido只是想用编程来打发圣诞的闲暇时光.Guido也希望能有一门语言既能够像C语言那样, ...

  8. sqlserver执行sql文件命令(sqlcmd)

    个人自用sqlcmd命令: sqlcmd -E -i test.sql -d databasename -s 127.0.0.1 sqlcmd命令解释: 用法: Sqlcmd            [ ...

  9. nginx 配一个简单的静态文件服务器 和一个虚似机

    下面是个图片服务器: server { listen ; server_name img.xxx.xxx.com; root /data/site/img.xxx.xxx.com; access_lo ...

  10. vim、gvim加载文件慢

    1. strace -f -T -o vim.strace vim 2. vim --startuptime "vim-time.txt" 3. gvim -f