#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
posted on 2020-02-20 01:43  海月CSDN  阅读(224)  评论(0编辑  收藏  举报