您的位置:首页 > 其它

【Codevs1215】迷宫

2016-02-20 19:40 267 查看

Description

在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO。

Input

输入的第一行为一个整数m,表示迷宫的数量。
其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。

Output

输出有m行,每行对应的迷宫能走,则输出YES,否则输出NO。

Sample Input

1
7
s...##.
.#.....
.......
..#....
..#...#
###...#
......e


Sample Output

YES

题解

#include<iostream>
using namespace std;
char a[20][20];
bool vis[20][20];
int xx[5]={0,-1,1,0,0};
int yy[5]={0,0,0,-1,1};
int m,n,judge;
void dfs(int x,int y)
{
vis[x][y]=true;
if (a[x][y] == 'e')
{
judge = 1;
return;
}
for (int i=1;i<=4;i++)
if (x+xx[i]>0 && x+xx[i]<=n && y+yy[i]>0 && y+yy[i]<=n)
if (a[x+xx[i]][y+yy[i]] != '#' && !vis[x+xx[i]][y+yy[i]])
dfs(x+xx[i],y+yy[i]);
}
int main()
{
cin>>m>>n;
for (int i=1;i<=m;i++)
{
judge=0;
for (int j=1;j<=n;j++)
for (int k=1;k<=n;k++)
cin>>a[j][k];
dfs(1,1);
if (judge) cout<<"YES";
else cout<<"NO";
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: