DFS(入门题,走迷宫)
生活随笔
收集整理的這篇文章主要介紹了
DFS(入门题,走迷宫)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1185: 走迷宮
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 383 Solved: 155
[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 2
S*
#T
3 3
S*#
#T
##
Sample Output
YES
NO
HINT
Source
AC_code:
#include <stdio.h>#include <string.h>char a[15][15];int step_x[]= {-1,1,0,0},step_y[]= {0,0,-1,1};//上下左右四個方向int n,m,f[15][15],flag;void DFS(int x,int y){f[x][y] = 1;//輔助數組,標記一個起點使用過if(a[x][y]=='T'){flag = 1;return;}for(int i = 0; i < 4; i++)//上下左右找路{int xx =x + step_x[i];int yy =y + step_y[i];if(a[xx][yy]!='*'&&!f[xx][yy]&&xx>=0&&xx<n&&yy>=0&&yy<m){DFS(xx,yy);//新起點找路}}}int main(){while(~scanf("%d%d",&n,&m)){memset(f,0,sizeof(f));int start_x,start_y;flag = 0;for(int i = 0; i < n; i++){scanf("%s",a[i]);for(int j = 0; j < m; j++){if(a[i][j]=='S'){start_x = i,start_y = j;}}}DFS(start_x,start_y);if(flag)printf("YES\n");elseprintf("NO\n");}return 0;} 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的DFS(入门题,走迷宫)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1562: 比较大小(思维)
- 下一篇: 1109: 胥哥的DOTA-水题(直接做