迷宫
Time Limit:1000MS Memory Limit:65536K
Total Submit:127 Accepted:54
Description
给出一个n*m的字符矩阵表示的地图,其中只包含4种字符'B' 'E' '.' 'X'。 'B'表示初始位置的格子,'E'表示终点位置的格子,'.'表示可以走的格子,'X'表示障碍物(即不可走的格子),请问是否存在一条路从初始位置走到终点位置。(注:每一步只能走到相邻的4个格子中的一个,不能走到矩阵之外,数据保证有且只有一个'B',有且只有一个'E')
Input
第一行有两个正整数n,m。(n,m <= 100)
下面为一个n*m的字符矩阵,即n行长度为m字符串每行字符之间没有空格
Output
输出只有1行。
若存在这样的路径则输出”Yes”,否则输出”No”。
Sample Input
4 4 BX.E .X.X .X.X ...X
Sample Output
Yes
Source
/*
不知道是不是递归的原因,速度慢了很多,46MS
*/
#include<stdio.h>
char chMap[104][104] ;
const int nDir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}} ;
int m = 0 ;
int n = 0 ;
int bX = 0 ;
int bY = 0 ;
int DFS(int x,int y) ;
int main(void)
{
int i = 0 ;
int j = 0 ;
scanf("%d%d",&n,&m) ;
getchar() ;
for(i = 0 ; i < n ; ++i)
{
for(j = 0 ; j < m ; ++j)
{
scanf("%c",&chMap[i][j]) ;
if('B' == chMap[i][j])
{
bX = i ;
bY = j ;
}
}
getchar() ;
}
if(1 == DFS(bX,bY))
{
puts("Yes") ;
}
else
{
puts("No") ;
}
return 0 ;
}
int DFS(int x,int y)
{
int i = 0 ;
int j = 0 ;
if(x < 0 || y < 0 || x >= n || y >= m)
{
return 0 ;
}
for(i = 0 ; i < 4 ; ++i)
{
if('E' == chMap[x+nDir[i][0]][y+nDir[i][1]])
{
return 1 ;
}
else if('.' == chMap[x+nDir[i][0]][y+nDir[i][1]])
{
chMap[x+nDir[i][0]][y+nDir[i][1]] = 'X' ;
if(1 == DFS(x+nDir[i][0],y+nDir[i][1]))
{
return 1 ;
}
chMap[x+nDir[i][0]][y+nDir[i][1]] = '.' ;
}
}
return 0 ;
}