目标算法:欧拉路径算法
应用范围:判断是否存在欧拉路径
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 105;
int degree[maxn];
int map[maxn][maxn];
int vis[maxn];
int n,m;
int ans;
void init()
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
memset(degree,0,sizeof(degree));
}
void dfs(int x)
{
vis[x] = 1;
for(int i=1;i<=n;i++)
{
if(!vis[i] && map[x][i])
dfs(i);
}
return ;
}
int check()
{
for(int i=1;i<=n;i++)
{
if(degree[i] % 2 != 0)
ans++;
}
return ans;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
int a,b;
int cnt = 0;
int flag = 0;
for(int i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
map[a][b] = map[b][a] = 1;
degree[a]++;
degree[b]++;
}
dfs(1);
ans = 0;
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
flag = 1;
break;
}
}
if(flag) printf("Graph is not connected!\n");
else if(!flag && check() == 2) printf("have Euler path\n");
else if(!flag && check() == 0) printf("have Euler Circuit\n");
else printf("have no Euler path\n");
}
}