1215 迷宫
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题目描述 Description
在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO。
输入描述 Input Description
输入的第一行为一个整数m,表示迷宫的数量。
其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。
输出描述
Output Description
输出有m行,每行对应的迷宫能走,则输出YES,否则输出NO。
样例输入
Sample Input
1
7
s...##.
.#.....
.......
..#....
..#...#
###...#
......e
样例输出 Sample Output
YES
数据范围及提示 Data Size & Hint
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<cstring> 5 using namespace std; 6 int n,map[101][101],q; 7 int xiang[5]={1,0,0,-1}; 8 int xiang2[5]={0,1,-1,0}; 9 void dfs(int x,int y) 10 { 11 int nx,ny; 12 if(x==n&&y==n) 13 { 14 q=1; 15 cout<<"YES"<<endl; 16 return; 17 } 18 for(int i=0;i<4;i++) 19 { 20 nx=x+hhh[i];ny=y+ppp[i]; 21 if(map[nx][ny]==0&&nx<=n&&ny<=n&&nx>0&&ny>0) 22 { 23 map[nx][ny]=1; 24 dfs(nx,ny); 25 map[nx][ny]=0; 26 return; 27 } 28 } 29 } 30 int main() 31 { 32 int m; 33 cin>>m; 34 for(;m>0;m--){ 35 q=0; 36 cin>>n; 37 char s; 38 for(int i=1;i<=n;i++) 39 for(int j=1;j<=n;j++){ 40 cin>>s; 41 if(s=='#')map[i][j]=1; 42 else map[i][j]==0;} 43 dfs(1,1); 44 if(q==0)cout<<"NO"<<endl; 45 } 46 return 0; 47 }