每日一题Day49

迷宫问题

描述

密密被困在一个迷宫里,迷宫有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;
}

猜你喜欢

转载自blog.csdn.net/ZLambert/article/details/81813100
今日推荐