hiho 50 Fleury算法求欧拉路径
来源:互联网 发布:美国大律师 知乎 编辑:程序博客网 时间:2024/04/30 06:42
问题
http://hihocoder.com/problemset/problem/1181?sid=784004
解法
伪代码
DFS(u): While (u存在未被删除的边e(u,v)) 删除边e(u,v) DFS(v) End PathSize ← PathSize + 1 Path[ PathSize ] ← u
#include <bits/stdc++.h>using namespace std;enum{maxn = 1000+4, maxm = 5005};vector<int> G[maxn];int degree[maxn];class E{ public: E(int _a, int _b) { a = min(_a, _b); b = max(_a, _b); }; int a, b; bool operator<(const E& e)const { return a==e.a? (b<e.b) : (a<e.a); }};map<E, int> edgeCnt;void dfs(int u){ for (int i=0; i< G[u].size(); ++i) { int v= G[u][i]; E e(u, v); if (edgeCnt[e]) { --edgeCnt[e]; dfs(v); } } printf("%d ", u);}int main(){ //freopen("in.txt", "r", stdin); int n, m; scanf("%d %d", &n, &m); memset(degree, 0, sizeof(degree)); edgeCnt.clear(); for (int i=0; i< m; ++i) { int a, b; scanf("%d %d", &a, &b); G[a].push_back(b); G[b].push_back(a); ++degree[a]; ++degree[b]; ++edgeCnt[E(a, b)]; } int start = 1; for (int i=2; i<=n; ++i) { if (degree[start]==0 || (degree[start]%2 ==0 && degree[i]%2)) start = i; if (degree[start]%2) break; } dfs(start); putchar('\n'); return 0;}
0 0
- hiho 50 Fleury算法求欧拉路径
- hiho欧拉路·二 ----- Fleury算法求欧拉路径
- Fleury算法求欧拉路径
- Fleury算法求欧拉路径
- Fleury算法求欧拉路径
- Fleury算法求欧拉路径
- hiho第五十周——欧拉路·二(Fleury算法求欧拉路径)
- hiho一下 第五十周 欧拉路·二 (Fleury算法求欧拉路径)
- Fleury(弗罗莱)算法求欧拉路径
- Fleury(弗罗莱)算法求欧拉路径
- Fleury(弗罗莱)算法求欧拉路径
- HIHO #1181 : 欧拉路·二(fleury算法输出欧拉路径)
- Poj 1041 John's trip (Fleury算法求欧拉回路路径)
- hihoCoder - 1181 - 欧拉路·二 (Fleury算法求欧拉路径)
- fleury算法求欧拉路径(欧拉回路)模板
- Fleury 算法,求欧拉回路
- Fleury算法求欧拉回路(一)
- Fleury算法求欧拉回路(二)
- 解决get方法传递URL参数中文乱码问题
- Java 注解
- 基于继承的设计与构造函数和析构函数的开销之间的关系
- 记录lua的table转string一个问题
- 程序员面试经典之链表分割
- hiho 50 Fleury算法求欧拉路径
- 我理解的设计模式:工厂模式
- Android小错误收集
- ios开发总结之UIImageView常用属性
- 如何使 类的成员函数作为回调函数
- JavaScript与OC的相互调用
- 使用UIWebView时objective-c与javascript互相调用
- SiteWhere用户使用手册
- 61. Rotate List