POJ 1041 - John's trip
2013-03-29 11:09
344 查看
第一次写欧拉回路,哭了
#include <iostream> #include <cstdio> #include <memory.h> #include <algorithm> #include <vector> using namespace std; #define MAXSTREET 2000 #define MAXJUNC 50 int path[MAXSTREET],dg[MAXJUNC],pNum,maxj; struct Edge{ int v,num,deleted; Edge *next; Edge(int vv=0,int nnum=0,Edge * nn=NULL):v(vv),num(nnum),next(nn),deleted(0){} }g[MAXJUNC]; void addEdge(int u,int v,int s){ Edge *next=g[u].next,*pre=&g[u]; while(next&&s>next->num){ pre=next; next=next->next; } pre->next=new Edge(v,s); pre->next->next=next; } Edge * deleteEdge(int u,int s){ Edge *ne=g[u].next,*pre=&g[u]; while(ne&&ne->num!=s){ pre=ne; ne=ne->next; } ne->deleted=1; pre->next=ne->next; return ne->next; } void clear(){ maxj=0; pNum=0; memset(dg,0,sizeof(dg)); memset(g,0,sizeof(g)); } void euler(int cur,int edgeN){ Edge *ne=g[cur].next; while (ne&&!ne->deleted) { int t=ne->num,ni=ne->v; ne=deleteEdge(cur,t);//将边删除 deleteEdge(ni,t); //无向图,反向也要删除 euler(ni,t); } path[pNum++]=edgeN; } int main(){ int x,y,s; while (scanf("%d%d",&x,&y)&&x&&y) { clear(); scanf("%d",&s); addEdge(x,y,s); addEdge(y,x,s); if(x>maxj)maxj=x; if(y>maxj)maxj=y; dg[y]++; dg[x]++; int oddCnt=0,evenCnt=0; while(scanf("%d%d",&x,&y)&&x&&y){ scanf("%d",&s); addEdge(x,y,s); addEdge(y,x,s); dg[y]++; dg[x]++; if(x>maxj)maxj=x; if(y>maxj)maxj=y; } for (int i=0;i<=maxj;++i) { if(dg[i]&1)oddCnt++; else evenCnt++; } if(oddCnt){ printf("Round trip does not exist.\n"); continue;; }else{ euler(1,-1); for(int i=pNum-2;i>=0;--i){ if(i!=pNum-2)printf(" "); printf("%d",path[i]); } printf("\n"); } } return 0; }
相关文章推荐
- poj 1041 John's trip 欧拉回路
- POJ 1041 John's trip
- poj 1041 John's trip(欧拉回路)
- Poj 1041 John's trip (Fleury算法求欧拉回路路径)
- POJ1041 John's trip(欧拉回路 + 并查集 + dfs)
- POJ 1041 John's trip(欧拉回路)
- POJ-1041-John's trip
- POJ1041 John's trip
- poj_1041 John's trip
- POJ 1041 John's trip(欧拉回路)
- poj 1041——John's trip
- POJ 1041 John's trip Euler欧拉回路判定和求回路
- poj 1041 John's trip
- poj 1041 John's trip (边最小字典序欧拉路径 Fleury)
- poj 1041 C - John's trip
- POJ 1041 John's Trip
- poj 1041 John's trip
- POJ-1041-John's trip
- POJ 1041 John's trip欧拉路
- POJ1041 John's trip