给一张个迷宫,问能否从起点走到终点,只能往上下左右走,不能斜着走
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
#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");
else
printf("NO\n");
}
return 0;
}