0
点赞
收藏
分享

微信扫一扫

汉密尔顿回路

小云晓云 2022-04-30 阅读 52
数据结构
#include <string.h>
#include <stdio.h>
int main()
{
	int n, m;
	scanf("%d %d", &n, &m);
	int G[250][250];
	memset(G, 0, sizeof(G));
	for (int i = 0; i < m; i++)
	{
		int a, b;
		scanf("%d %d", &a, &b);
		G[a][b] = G[b][a] = 1;
	}
	
	scanf("%d", &m);
	for (int i = 0; i < m; i++)
	{
		int num;
		int k, start, pre, flag=1;
		scanf("%d", &k);
		int vis[1001];
		memset(vis, 0, sizeof(vis));
		
		if(k != n + 1) flag=0;	
		for (int j = 0; j < k; j++)
		{
			scanf("%d", &num);
			if (j == 0)
				start = num;
			else if (G[pre][num] == 0)
				flag = 0;
			if (vis[num]>1&&num!=start)
				flag = 0;
			pre=num;//为前一个数
			vis[num]++;
		}
		if(vis[start]>2||num!=start)flag=0;
		if (flag==0) printf("NO\n");
		else printf("YES\n");
	}
	return 0;
}

每个点只能走一次,除了起点。起点也不能超过两次。起始必须是同一点。

举报

相关推荐

0 条评论