POJ 1041(无向图欧拉回路)
来源:互联网 发布:mysql 自定义排序 编辑:程序博客网 时间:2024/03/29 12:55
这个题目和POJ 1086不同,1086是有向图欧拉回路,这个是无向图欧拉回路。还有一个很重要的一点,本题目事先声明是连通图,所以不需要进行图遍历验证连通性。剩下的就是判断是否存在欧拉路,然后进行输出。
本题目不要求字典序,但是本代码是按照字典序输出的。
下面是关于七桥问题以及欧拉路的百度百科,不清楚的朋友可以看看:http://baike.baidu.com/view/142962.htm, 个人认为还是讲的比较清楚。
下面是代码:
#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>#include <vector>#define M 50using namespace std;struct edge { int a,b,c; };struct T { int b,c; };int n, sum[M], st, path[1997], q;edge dis[1997];bool v[1997];vector<T> e[M];void eulerpath( int s ){ for ( int i = 0; i < e[s].size(); i++ ) if ( !v[e[s][i].c] ) { v[e[s][i].c] = true; eulerpath(e[s][i].b); path[q++] = e[s][i].c; }}bool cmp( edge a, edge b){ return a.c < b.c;}int main(){ int i, j, k, a, b, c, t; T w; freopen( "ex.in", "r", stdin); while ( scanf("%d%d", &a, &b) ) { if ( a == 0 ) break; t = 0; memset(sum,0,sizeof(sum)); while ( scanf("%d", &c) ) { dis[t].a = --a; dis[t].b = --b; dis[t++].c = c; sum[a]++; sum[b]++; if ( t == 1 ) st = min(a,b); scanf("%d%d", &a, &b); if ( a == 0 ) break; } for ( i = 0; i < 44; i++ ) if ( sum[i] % 2 ) { printf( "Round trip does not exist.\n"); break; } if ( i < 44 ) continue; for ( i = 0; i < 44; i++ ) e[i].clear(); sort(dis,dis+t,cmp); for ( i = 0; i < t; i++ ) { w.b = dis[i].b; w.c = dis[i].c; e[dis[i].a].push_back(w); w.b = dis[i].a; w.c = dis[i].c; e[dis[i].b].push_back(w); } q = 0; memset(v,0,sizeof(v)); eulerpath(st); printf( "%d", path[t-1]); for ( i = t-2; i >= 0 ; i-- ) printf(" %d", path[i]); printf( "\n" ); }}
- POJ 1041(无向图欧拉回路)
- POJ 1041 John's trip (无向图欧拉回路)
- 无向图欧拉回路
- POJ 1041 无向图的欧拉回路
- POJ 1041 John's trip(无向图欧拉回路 && 路径)
- 无向图欧拉回路求法
- 无向图欧拉回路模板
- 无向图欧拉回路的判定
- poj 2230 Watchcow 无向欧拉回路求路径
- 无向图回路算法
- 无向回路的求法
- (POJ 1041)John's trip [无向欧拉图] 输出字典序最小的欧拉回路
- 有向图,无向图的欧拉回路和欧拉通路poj 2337
- 无向图欧拉回路的判定之hdu1878
- Riding the Fences (USACO 3.3) 无向图欧拉通路/回路
- 洛谷1341无序字母对(无向图欧拉回路)
- ccf 201512-4 送货 无向图欧拉回路
- UVA10054 The Necklace 无向图欧拉回路+连通性
- Android高仿360安全卫士--布局篇(一)
- 画表格--蓝桥杯
- Android高仿360安全卫士--布局篇(2)
- DedeCms使用笔记
- spket,ExtJS4.0.2配置
- POJ 1041(无向图欧拉回路)
- hdu 3501 Calculation 2
- ubuntu12.0.4下 android x86 源代码 下载
- 数据库访问技术之ADO
- Useful Android Libraries
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上,要求输出结果必须按ABC的顺序显示:ABCABC
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
- 详解大端模式和小端模式
- 编程从业五年的十四条经验,句句朴实