欧拉回路的判断:
1、若有一个节点的度为奇数,则不能构成欧拉回路;
2、判断所有点是否可以一笔通过并回到起点。
#include<iostream>
using namespace std;
#define N 1005
int deg[N]; //每个节点的度
bool vis[N];
int map[N][N];
bool DegValid(int n)
{
for(int i=1;i<=n;i++)
if(deg[i]&1)
return false;
return true;
}
void DfsCircle(int s,int n)
{
int i;
vis[s]=true;
for(i=1;i<=n;i++)
{
if(map[s][i] && !vis[map[s][i]])
DfsCircle(i,n);
}
}
int main()
{
int n,m;
int a ,b,i;
bool f;
while(cin>>n>>m &&n)
{
memset(deg,0,sizeof(deg));
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
for(i=1;i<=m;i++)
{
cin>>a>>b;
deg[a]++;
deg[b]++;
map[a][b]=map[b][a]=i;
}
if(!DegValid(n))
cout<<"0"<<endl;
else
{
DfsCircle(a,n);
f=true;
for(i=1;i<=n;i++)
if(!vis[i])
{
f=false;
break;
}
if(!f)
cout<<"0"<<endl;
else
cout<<"1"<<endl;
}
}
return 0;
}原文地址:http://blog.csdn.net/a809146548/article/details/45155303