1215 迷宫
2017-04-02 09:56
218 查看
题目描述 Description
在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO。
输入描述 Input Description
输入的第一行为一个整数m,表示迷宫的数量。
其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。
输出描述 Output Description
输出有m行,每行对应的迷宫能走,则输出YES,否则输出NO。
样例输入 Sample Input
样例输出 Sample Output
数据范围及提示 Data Size & Hint
题目描述 Description
在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO。
输入描述 Input Description
输入的第一行为一个整数m,表示迷宫的数量。
其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。
输出描述 Output Description
输出有m行,每行对应的迷宫能走,则输出YES,否则输出NO。
样例输入 Sample Input
1 7 s...##. .#..... ....... ..#.... ..#...# ###...# ......e
样例输出 Sample Output
YES
数据范围及提示 Data Size & Hint
#include <iostream> #include <cstdio> #include <queue> using namespace std; char map[16][16]={0}; int vis[16][16]={0}; int n; int x1,y1,x2,y2; int tt=0; int dir[4][2]={-1,0,1,0,0,-1,0,1};//四个方向 typedef struct node { int x,y; }No; queue<node>Q; void bfs() { int i,s,t; No a={x1,y1}; Q.push(a);//将可以走的方格差入队列 vis[x1][y1]=1;//标记已走 while(!Q.empty()) { a=Q.front(); if(a.x ==x2 && a.y == y2) { tt=1; printf("YES\n");//找到出口 return; } Q.pop();//取出第一个元素 for(i=0;i<4;i++) { s=a.x+dir[i][0]; t=a.y+dir[i][1]; if(s>=0 && s<n && t>=0 &&t<n && !vis[s][t] &&(map[s][t]=='.'||map[s][t]=='e'))//符合可以走的条件 { No a1={s,t}; Q.push(a1);//差入队列 vis[s][t] =1; } } } } int main() { int xn; scanf("%d", &xn); while(xn--) { tt=0; scanf("%d", &n); for(int i=0;i<n;i++) scanf("%s", map[i]); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(map[i][j]=='s') x1=i,y1=j; if(map[i][j]=='e') x2=i,y2=j; } } bfs(); if(tt==0) printf("NO\n"); } }
相关文章推荐
- codevs 1215 迷宫
- codevs1215走迷宫
- 1215 迷宫
- [Wikioi 1215]迷宫
- 1215 迷宫
- codevs1215 迷宫
- Codevs 1215 迷宫 裸BFS
- Codevs 1215 迷宫(DFS)
- nku1215: 小鼠迷宫问题
- BFS简单题套路_Codevs 1215 迷宫
- codevs 1215 迷宫 广搜bfs 深搜dfs
- CodeVS 1215 迷宫 题解
- CODE[VS]1215 迷宫
- 【Codevs1215】迷宫
- 1215迷宫问题(wikioi)突破过程
- codevs 1215 迷宫
- codevs 1215_迷宫_bfs
- 1215 迷宫
- 1215 迷宫
- 1215 迷宫