您的位置:首页 > 其它

判断欧拉路径(非并查集写法)

2016-07-29 22:30 495 查看
目标算法:欧拉路径算法

应用范围:判断是否存在欧拉路径

#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");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  欧拉路径