codevs 1215_迷宫_bfs
2017-01-18 14:18
288 查看
题目描述
在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO。思路
暴力广搜,判重就可以了O(n^2)
#include <stdio.h> #include <queue> #include <string> using namespace std; int m,start[3],end[3],a[20][20],fl=0; int dx[5]={0,1,0,-1,0}; int dy[5]={0,0,1,0,-1}; int bfs() { queue<int> tx; queue<int> ty; tx.push(start[1]); ty.push(start[2]); while (!tx.empty()) { int xx=tx.front(),yy=ty.front(); tx.pop(); ty.pop(); if (xx==end[1]&&yy==end[2]) { printf("YES\n"); fl=1; return 0; } for (int i=1;i<=4;i++) if (dx[i]+xx>=1&&dx[i]+xx<=m&&dy[i]+yy>=1&&dy[i]+yy<=m&&a[dx[i]+xx][dy[i]+yy]==0) { a[dx[i]+xx][dy[i]+yy]=1; tx.push(dx[i]+xx); ty.push(dy[i]+yy); } } } int main() { int n; scanf("%d",&n); for (int k=1;k<=n;k++) { fl=0; scanf("%d",&m); for (int i=1;i<=m;i++) { char ch[20]; scanf("%s",&ch); for (int j=1;j<=m;j++) { if (ch[j-1]=='#') a[i][j]=1; if (ch[j-1] == 's') { start[1]=i; start[2]=j; } if (ch[j-1] == 'e') { end[1]=i; end[2]=j; } } } bfs(); if (fl==0) printf("NO\n"); } }
相关文章推荐
- codevs 1215 迷宫 广搜bfs 深搜dfs
- BFS简单题套路_Codevs 1215 迷宫
- codevs 1215 迷宫
- Codevs 1215 迷宫 裸BFS
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- 【BFS+保存路径】POJ 3984 迷宫问题
- 迷宫问题bfs+打印路径
- 练习赛2(补题) 问题 C: 迷宫问题 【BFS模板题】
- nku1215: 小鼠迷宫问题
- BFS求解迷宫最短路径
- POJ 2049 走迷宫选取经过门最少的路线 BFS搜索
- NYOJ 82 迷宫寻宝(一)(BFS)
- zjnu 1450 - 迷宫(BFS)解题报告
- 题目1335:闯迷宫 BFS实现 和 递归实现。
- 广搜BFS 迷宫问题
- POJ3984 迷宫问题(BFS 记忆路径)
- 杭电1728 逃离迷宫(bfs过)
- 蓝桥杯 算法提高 学霸的迷宫(简单bfs+记录路径)
- poj 迷宫问题(路径记录)(DFS,BFS)
- HDU ACM 1728 逃离迷宫 (广搜BFS)