#include <iostream>
#define max 10
using namespace std;
int a[max][3];//迷宫
int m,n;//m:出口层数 n:入口
int tag;//为输出做标记
int DFS(int k)//深度搜索第k层,k:当前路口
{
int i,j;
if(k==m)//到达出口
{
tag=1;
return 0;
}
for(i=0;i<3;i++)//遍历三个路口
{
if(0!=a[k][i]&&tag!=1)//如果当前路口有通路,并且没有走过
{
DFS(a[k][i]);//进入下一个路口 ,递归
}
}
return 0;
}
int main()
{
while(1)
{
cin>>n;
if(0==n)break;
int i,j;
tag=0;
for(i=1;i<=n;i++)
for(j=0;j<3;j++)
cin>> a[i][j];
cin>>m;
//a[m][0]=1;
DFS(1);//从第一层开始搜索
if(1==tag)
cout<<"YES"<<endl;
else if(tag==0)
cout<<"NO"<<endl;
}
return 0;
}
描述
密密被困在一个迷宫里,迷宫有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
原博地址
https://blog.csdn.net/weixin_43673589