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

来源:互联网 发布:淘宝拓拨斯科技怎么样 编辑:程序博客网 时间:2024/05/17 08:42

目标算法:欧拉路径算法

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

#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");    }}


0 0