迷宫问题
描述
密密被困在一个迷宫里,迷宫有n个路口,编号为1-n。密密现在站在第一个路口,出口编号为m。先给出每个路口通向何处,问密密能否逃出迷宫。
输入
多组数据,每组数据n+2行。第一行为一个正整数n代表路口的个数,之后n行,这n行中的第i行为第i个路口的向左路口、向前路口、向右路口。最后一行为一个正整数m代表迷宫的终点。当n=0时输入结束。
输出
每组数据输出一行,若密密能走出迷宫,输出“YES”,否则输出“NO”。
样例输入1
6 0 2 0 3 5 6 0 0 4 0 0 0 0 0 0 7 0 0 7 3 2 0 0 0 0 0 0 0 0 3 0
样例输出1
YES NO
解答:深度优先搜索当前位置能到达的所有路口,当遇到终点路口时即能走出迷宫。
#include<stdio.h>
#define maxn 1000
int e;
int flag;
int p[maxn];
int m[maxn][3];
void DFS(int n)
{
if(n == e)
{
flag=1;
return ;
}
for(int i=0; i<3; i++)
{
if(m[n][i] && !p[m[n][i]])
{
p[m[n][i]]=1;
DFS(m[n][i]);
p[m[n][i]]=0;
}
}
}
int main()
{
int n;
while(1)
{
scanf("%d",&n);
if(n==0)
break;
flag=0;
for(int i=1; i<=n; i++)
p[i]=0;
for(int i=1; i<=n; i++)
{
for(int j=0; j<3; j++)
{
scanf("%d",&m[i][j]);
}
}
scanf("%d",&e);
p[1]=1;
DFS(1);
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}