• 无向图欧拉回路,判断


    题:欧拉回路

     参考:浙大复试 HDU 1878 欧拉回路

    本题是给图判断图中是否存在欧拉回路,欧拉回路的含义题目中也说明了,本题的思路就是并查集判断图是否连通,如果不连通不可能存在欧拉回路,如果连通了判断欧拉回路存在的条件是图中各点的度全部为偶数(所以这里需要注意将存放顶点度的数组初始化)。

     1 /***********************************************/
     2 int in[maxn],out[maxn];
     3 int st[maxn];
     4 
     5 int find(int r)
     6 {
     7     while(st[r]!=r)
     8         r=st[r];
     9     return r;
    10 }
    11 
    12 void add(int a,int b)
    13 {
    14     int fa=find(a);
    15     int fb=find(b);
    16     if(fa<fb) st[fb]=fa;
    17     else st[fa]=fb;
    18 }
    19 
    20 int mp[maxn];
    21 
    22 int main()
    23 {
    24     int n,m;
    25     while(cin>>n && n)
    26     {
    27         cin>>m;
    28         mem0(st);
    29         mem0(mp);
    30         mem0(in);
    31         for(int i=1;i<=n;i++) st[i]=i;
    32         for(int i=1;i<=m;i++)
    33         {
    34             int a,b;
    35             cin>>a>>b;
    36             if(a>b) swap(a,b);
    37             if(mp[a]!=b)
    38             {//输入的边不重复 
    39                 mp[a]=b;
    40                 in[a]++;
    41                 in[b]++;
    42                 add(a,b);//合并 
    43             }
    44         }
    45         int ans=0;
    46         for(int i=1;i<=n;i++) if(st[i]==i) ans++;
    47         if(ans>1)//不连通
    48             cout<<0<<endl;
    49         else{
    50             int f=0;
    51             for(int i=1;i<=n;i++) if(in[i]%2) f=1;
    52             if(f) cout<<0<<endl;
    53             else cout<<1<<endl;
    54         } 
    55     }
    56     return 0;
    57 }
    View Code

    并查集~

    总结:欧拉回路存在条件

        1,图连通

        2,图中各点的度全部为偶数

    关于欧拉回路与欧拉路径的判断->>>>>自家博客

  • 相关阅读:
    spark集群安装部署
    CentOS7 下安装GUI图形界面GNOME
    Wininet请求包装类简稿
    Wininet下载类初稿
    MAC 编制计划任务
    弹出式窗口管理单元备忘
    rc资源文件的中英文应用备忘
    自备工具库
    界面方面的备忘
    多屏开发的备忘
  • 原文地址:https://www.cnblogs.com/liuyongliu/p/10321106.html
Copyright © 2020-2023  润新知