[UVA 10054]The Necklace[欧拉回路][打印路径]
2015-08-22 20:46
337 查看
题目链接:[UVA 10054]The Necklace[欧拉回路][打印路径]
题意分析:
判断图中是否都是欧拉回路,是的话输出所有路径。
解题思路:
根据所有点的度数来判断是否是欧拉回路,当所有点的度数都是偶数时,该图即都为欧拉回路。因为这题可能存在多个回路,所以不用判连通。
个人感受:
嘛,不会做呀。多做多练。
具体代码如下:
题意分析:
判断图中是否都是欧拉回路,是的话输出所有路径。
解题思路:
根据所有点的度数来判断是否是欧拉回路,当所有点的度数都是偶数时,该图即都为欧拉回路。因为这题可能存在多个回路,所以不用判连通。
个人感受:
嘛,不会做呀。多做多练。
具体代码如下:
#include<iostream> #include<cctype> #include<cstdio> #include<cstring> #include<algorithm> #include<set> #include<queue> using namespace std; const int INF = 0x7f7f7f7f, MAXN = 111; int c[MAXN], g[MAXN], vis[MAXN][MAXN]; vector<int> v[MAXN]; void euler(int u) { for (int i = 0; i < v[u].size(); ++i) { int cur = v[u][i]; if (vis[u][cur]) { --vis[u][cur]; --vis[cur][u]; euler(cur); printf("%d %d\n", cur, u); } } } int main() { int t, n, a, b; for (int kase = scanf("%d", &t); kase <= t; ++kase) { memset(vis, 0, sizeof vis); for (int i = 0; i < MAXN; ++i) v[i].clear(), g[i] = 0; if (kase > 1) printf("\n"); scanf("%d", &n); set<int> color; for (int i = 0; i < n; ++i) { scanf("%d %d", &a, &b); color.insert(a); color.insert(b); v[a].push_back(b); v[b].push_back(a); ++g[a], ++g[b]; ++vis[a][b], ++vis[b][a]; } bool flag = 0; for (auto it = color.begin(); it != color.end(); ++it) { if (g[*it] % 2) { flag = 1; break; } } printf("Case #%d\n", kase); if (flag) cout << "some beads may be lost\n"; else { euler(*color.begin()); } } return 0; }
相关文章推荐
- 关于win7 下delphi7出现重新注册,无法打开的故障解决办法
- 判断两个IP是否属于同一子网
- 学习tcl的几个好网络连接
- Winform 分页
- 数据库调优的方法有那些
- javaScript简介
- LeetCode[85]::Maximal Rectangle C++
- NOIP 2005 过河
- poj3258 哈夫曼树 优先队列
- android studio 快捷键
- XMPP的android下的登陆,注册等:
- 一个人如何完成一整个网站的开发(推荐好文,看完绝对让你回味无穷)
- objc的单例模式(ARC环境下)
- 文章标题
- 自适应网页设计
- c++与Tcl通过管道通信,并传递参数,获取测试仪实时测试进度
- USBDM BDM Interface for Freescale Microcontroller -- Hardware
- 存储过程新方法萌芽 *——*
- hdoj1754 I Hate It【线段树区间最大值维护+单点更新】
- sqlite3使用示例