HDU-1878 欧拉回路 判定是否存在欧拉回路
2012-03-10 16:19
253 查看
题义就是在给定的图中判定是否存在欧拉回路。
图G的一个回路,若它恰通过G中每条边一次,则称该回路为欧拉(Euler)回路。
具有欧拉回路的图称为欧拉图(简称E图)。
这里总结下各种图的判定的方法:
1.无向图中:所给定的图为连通图,且所有节点的度为偶数;
2.有向图中:所给定的图为连通图,且所有节点的度为零。
代码如下:
图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; }
相关文章推荐
- Hdu 1878 欧拉回路[判断是否存在欧拉回路]
- HDU 1878(1Y) (判断欧拉回路是否存在 奇点个数为0 + 一个联通分量 *【模板】)
- 【HDU 1878】欧拉回路(并查集,欧拉回路概念及判定)
- HDU 1878 欧拉回路【欧拉回路判定】
- HDU 1878 欧拉回路(简单欧拉回路判定)
- HDU-1878 欧拉回路判定
- 欧拉通路 欧拉回路的判定 Hdu 1878 欧拉回路
- HDU 1878 欧拉回路 Tarjan+欧拉判定
- 【欧拉回路(无向图判定)】hdu 1878 欧拉回路
- 判定数组中是否存在重复元素
- java判定数组或集合是否存在某个元素
- hdu 1878 欧拉回路 无向图连通性
- !HDU 4334 集合各出一数和为0是否存在-思维、卡时间-(指针的妙用)
- hdu 1878 欧拉回路 欧拉回路+并查集
- hdu 1878 欧拉回路
- 浙大复试 HDU 1878 欧拉回路
- hdu 1878 欧拉回路【并查集入门】
- hdu 1878 欧拉回路(水题,判断欧拉回路)
- 如何判定数组是否存在重复元素
- Hdu 1878 欧拉回路