zoukankan      html  css  js  c++  java
  • HDU1878 欧拉回路 判定是否存在欧拉回路

    题义就是在给定的图中判定是否存在欧拉回路。

    图G的一个回路,若它恰通过G中每条边一次,则称该回路为欧拉(Euler)回路。
    具有欧拉回路的图称为欧拉图(简称E图)。

    这里总结下各种图的判定的方法:

    1.无向图中:所给定的图为连通图,且所有节点的度为偶数;
    2.有向图中:所给定的图为连通图,且所有节点的度为零。

    代码如下:

    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    #define MAXN 1010
    using namespace std;

    int cnt[MAXN], set[MAXN];

    int find(int x)
    {
    return x == set[x] ? x : set[x] = find(set[x]);
    }

    int main()
    {
    int N, M, x, y, root;
    while (scanf("%d", &N), N)
    {
    int flag = 1, root = 0;
    scanf("%d", &M);
    for (int i = 0; i <= N; ++i)
    set[i] = i;
    memset(cnt, 0, sizeof (cnt));
    while (M--)
    {
    scanf("%d %d", &x, &y);
    int a = find(x), b = find(y);
    if (a != b)
    {
    set[a] =b;
    }
    ++cnt[x], ++cnt[y];
    }
    for (int i = 1; i <= N; ++i)
    {
    if (set[i] == i)
    {
    ++root;
    if (root > 1)
    {
    flag = 0;
    break;
    }
    }
    if (cnt[i] & 1)
    {
    flag = 0;
    break;
    }
    }
    printf(flag ? "1\n" : "0\n");
    }
    return 0;
    }


     

  • 相关阅读:
    Fire
    Apple Tree
    访问艺术馆
    三角关系
    字母表
    折纸
    旅行
    单词分类

    圆桌游戏
  • 原文地址:https://www.cnblogs.com/Lyush/p/2389246.html
Copyright © 2011-2022 走看看