欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
2013-10-11 09:47
176 查看
POJ 1386 判断有向图中是否存在欧拉回路
View Code
#include <cstdio> #include <cstring> #define maxn 2010 int map[50][maxn],degree[50]; int stack[maxn],top; bool vis[maxn]; int m; inline int max(int a,int b){ return a > b ? a : b; } void euler(int u){ for(int i = 1;i <= m;i++){ if(map[u][i] && !vis[i]){ vis[i] = 1; euler(map[u][i]); stack[top++] = i; } } } int main(){ int x,y,z; while(scanf("%d%d",&x,&y)){ if(!x && !y) break; memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); memset(degree,0,sizeof(degree)); top = m = 0; scanf("%d",&z); degree[x]++;degree[y]++; map[x][z] = y;map[y][z] = x; m = max(m,z); while(scanf("%d%d",&x,&y)){ if(!x && !y) break; scanf("%d",&z); degree[x]++;degree[y]++; map[x][z] = y;map[y][z] = x; m = max(m,z); } bool flag = false; for(int i = 1;i < 50;i++){ if(degree[i]&1){ flag = true; break; } } if(flag){ printf("Round trip does not exist.\n"); continue; } euler(1); for(int i = top-1;i >= 0;i--){ if(!flag){ printf("%d",stack[i]); flag = true; } else printf(" %d",stack[i]); } printf("\n"); } return 0; }
View Code
相关文章推荐
- POJ1386 & POJ1041 ——再探欧拉路、欧拉回路
- POJ 1041 John's trip (无向图欧拉回路)
- POJ 1041 - John's trip 输出欧拉回路路径边..通用做法
- 欧拉回路输出路径 POJ - 1041
- poj 1386 欧拉回路判定
- hdu 1116 poj 1386 欧拉回路并查集
- POJ ~ 2230 ~ Watchcow(欧拉回路)
- poj1386 Play on Words (欧拉回路)
- POJ 2230 (欧拉回路)
- POJ 1041 John's trip 无向图的【欧拉回路】路径输出
- POJ 2230 Watchcow(欧拉回路)
- POJ 1041 John's trip(无向图欧拉回路 && 路径)
- POJ2230 Watchcow——欧拉回路
- POJ 2230 Watchcow 有向图两次欧拉回路记录路径
- poj 1386 Play on Words(有向图欧拉回路)
- poj 1041(字典序输出欧拉回路)
- POJ 1041 John's trip(欧拉回路)
- POJ 1386(欧拉回路,欧拉通路,变相DNF)
- POJ 2230 Watchcow(欧拉回路:输出点轨迹)
- poj 1386 欧拉回路