hdu 1878 欧拉回路

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1878

如题判断无向图的回路。。

一般有并查集判断。。和深搜和广搜。。。

用深搜判断 主要判断每个点的入度和初度之和要是偶数。。

不然肯定是不行的。。。

然后深度搜索看是否一次访问了所有的点。。如果访问了全部点而且每个点的初度与入度之和为偶数就是回路了, ,


这题用CIN输入。。。会超时!!!!!

下面是用深搜AC的代码:

#include<iostream>
using namespace std;
#define N 1001
int map[N][N];
bool visited[N];
int cheak[N];
int n,i;
void init()
{
	memset(visited,0,sizeof(visited));
	memset(map,0,sizeof(map));
	memset(cheak,0,sizeof(cheak));

}
void DFS(int k)
{
	visited[k]=1;
	for(i=1;i<=n;i++)
		if(!visited[i]&&map[k][i])
	    	DFS(i);
		
		return;
}
int  cheakk()
{
	for(i=1;i<=n;i++)
		if(cheak[i]%2)
			return 0;

		return 1;
}
int main()
{
	int m,i,a,b;
	while(cin>>n&&n)
	{
		cin>>m;
		init();

		for(i=1;i<=m;i++)
		{
		//	cin>>a>>b;                      //用cin果断超时了n次没找到哪里超时了。。以后果断全用scanf()算了。
			scanf("%d%d",&a,&b);
			map[a][b]=map[b][a]=1;

			cheak[a]++;
			cheak[b]++;

		}

		DFS(1);

		for(i=1;i<=n;i++)
			if(!visited[i])
				break;

		if(i>n&&cheakk())
			printf("1\n");
		else
			printf("0\n");
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值