迷宫问题一 找到迷宫的一条路径(DFS+回溯)
2014-12-11 23:35
477 查看
问题描述:
一天,小明不小心进入了一个迷宫,现在请你帮助他判断能否出走出迷宫,如果可能,则输出YES. 如果不能走到出口,则输出NO. 每次走只能是上下左右4个方向.
*表示可走
#表示障碍
T表示出口
入口是(1,1),数据保证左上角是入口
3 3
*##
***
##T
4 4
****
*##*
**#*
###T
一天,小明不小心进入了一个迷宫,现在请你帮助他判断能否出走出迷宫,如果可能,则输出YES. 如果不能走到出口,则输出NO. 每次走只能是上下左右4个方向.
*表示可走
#表示障碍
T表示出口
入口是(1,1),数据保证左上角是入口
#include<iostream> using namespace std; char maze[100][100]; bool flag[100][100]; int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; int m,n; bool dfs(int x,int y) { flag[x][y]=1; //走过的路标记为1 if(maze[x][y]=='T')return true; for(int i=0;i<4;i++) //四个方向 { int nx=x+dx[i]; int ny=y+dy[i]; if(flag[nx][ny]==0||maze[nx][ny]=='*'||maze[nx][ny]=='T'&&nx>0&&ny>0&&nx<m+1&&ny<n+1) { return dfs(nx,ny); flag[nx][ny]=0; //回溯,将标记重新标记为0 } } return false; //找不到返回false } int main() { while(cin>>m>>n){ memset(maze,0,sizeof(maze)); memset(flag,0,sizeof(flag)); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) cin>>maze[i][j]; if(dfs(1,1))cout<<"YES"<<endl; else cout<<"NO"<<endl; } }测试数据:
3 3
*##
***
##T
4 4
****
*##*
**#*
###T
相关文章推荐
- FOJ 1205 小鼠迷宫问题【BFS+dfs回溯查找路径】
- 迷宫问题二 统计路径条数(dfs+回溯)
- POJ 3984-迷宫问题(BFS+回溯路径)
- 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
- poj 迷宫问题(路径记录)(DFS,BFS)
- poj 迷宫问题(路径记录)(DFS,BFS)
- poj 迷宫问题(路径记录)(DFS,BFS)
- poj 3984 迷宫问题 dfs 求迷宫路径
- 二维迷宫的一条路径-DFS
- poj 迷宫问题(路径记录)(DFS,BFS)
- 迷宫问题1-在给定的迷宫中判断是否存在一条路径从起点到终点
- poj 迷宫问题(路径记录)(DFS,BFS)
- poj 3984 迷宫问题 dfs 求迷宫路径
- poj 迷宫问题(路径记录)(DFS,BFS)
- algo3-4-3.c 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
- poj 3984 迷宫问题 dfs 求迷宫路径
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
- poj 3984 迷宫问题【dfs+路径输出】
- poj 迷宫问题(路径记录)(DFS,BFS)
- poj 迷宫问题(路径记录)(DFS,BFS)