题目 1243 : Hero In Maze 简单版
题目描述
500年前,Jesse是我国最卓越的剑客。他英俊潇洒,而且机智过人_。 突然有一天,Jesse心爱的公主被魔王困在了一个巨大的迷宫中。Jesse听说这个消息已经 是两天以后了,他急忙赶到迷宫,开始到处寻找公主的下落。 请你判断他是否能救出心爱的公主。(假设有路可以通到公主那就可以找到公主。)
输入
题目包括多组测试数据。 每组测试数据以两个整数n,m(20>=n, m>0)开头,分别代表迷宫的长和高。紧接着有m行 ,n列字符,由".","",“P”,"S"组成。其中 “.” 代表能够行走的空地。 "" 代表墙壁,Jesse不能从此通过。 “P” 是公主所在的位置。 “S” 是Jesse的起始位置。 Jesse只能选择上、下、左、右任意一方向走一步。 输入以0 0结束。
输出
如果能救出公主输出YES,否则输出NO
题目分析:
#include<stdio.h>
#include<string.h>
char a[21][21];
int flag=0;
void DFS(int x,int y)
{
a[x][y]='*';
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//深度搜索的方向
if(x==ex&&y==ey)
{
flag=1;
return ;
}
for(int i=0;i<4;i++)
{
int tx,ty;
tx=x+next[i][0];
ty=y+next[i][1];
if(tx<0||tx>m||ty<0||ty>n)
continue;
if(a[tx][ty]!='*')
{
a[tx][ty]='*';
dfs(tx,ty);
}
}
return ;
}
int main()
{
while(scanf("%d%d",&m,&n)&&m,n)
{
int k=0;
flag=0;
memset(a,0,sizeof(a));
for(int i=1; i<=m ;i++)
scanf("%s",a[i]);
for(int i=1;i<=m;i++)
{
for(int j=0;j<=n;j++)
{
if(a[i][j]=='P')
{
sx=i;
sy=j;
}
if(a[i][j]=='S')
{
ex=i;
ey=j;
}
if(a[i][j]=='*')
{
k=1;
}
dfs(sx,sy);
if(k==0)
printf("YES\n");
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
}
return 0;
}