zcmu-1185
1185: 走迷宮
Time Limit:?1 Sec??Memory Limit:?128 MBSubmit:?267??Solved:?101
[Submit][Status][Web Board]
Description
給一張個迷宮,問能否從起點走到終點,只能往上下左右走,不能斜著走
Input
多組測試數據,每組第一行兩個正整數,分別為n和m
表示n這個迷宮有n行m列(0<n,m<10)
接著是n行m列,
'#'表示路
‘*’表示墻
‘S’表示起點
‘T’表示終點
Output
每組測試數據輸出一個結果,如果能從S走到T,輸出“YES”,否則輸出“NO”
Sample Input
2 2S*#T3 3S*##*T##*Sample Output
YESNOHINT
Source
思路:最簡單的dfs了,也是最基礎的,通常很多的dfs都是遞推。本人第一次學搜索dfs算法的一道題目。還是自己太菜了。得好好努力了
代碼:
#include<cstdio> #include<cstring>const int N=15; char maze[N][N]; int v[N][N]; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; int n,m; bool flag;void dfs(int x,int y) {v[x][y]=1;if(maze[x][y]=='T'){flag=true;return;}for(int i=0; i<4; i++){int nx=x+dx[i];int ny=y+dy[i];if(0<=nx&&nx<n&&0<=ny&&ny<m&&maze[nx][ny]!='*'&&v[nx][ny]==0){dfs(nx,ny);}} } int main() {while(~scanf("%d%d",&n,&m)){flag=false;memset(v,0,sizeof(v));memset(maze,'\0',sizeof(maze));for(int i=0; i<n; i++){getchar();scanf("%s",maze+i);}int p,q;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(maze[i][j]=='S'){p=i;q=j;break;}}}dfs(p,q);if(flag)printf("YES\n");else printf("NO\n");}return 0; }總結
- 上一篇: php mysql-proxy报错_My
- 下一篇: hdu-2209 dfs