#include <stdio.h>#include <string.h>#include <algorithm>using namespace STD;struct{intTopintnode[ $];} Sintg[ $][ $],c[ $],n,m;voidDfsintx) {intI s.top++; S.node[s.top]=x; for(i=0; i<n;i++) {if(g[i][x]>0) {g[i][x]=g[x][i]=0; DFS (i); Break; } }}voidFleury (intST) {intU,v,i,f; s.top=0; s.node[s.top]=st; while(s.top>=0) {U=s.node[s.top]; f=0; for(i=0; i<n;i++) {if(g[u][i]>0) {f=1; Break; } }if(f) {s.top--; DFS (U); }Else{printf("%d". UI1); s.top--; } }}intMain () {intU,v,i,j; while(~scanf("%d%d", &n,&m)) {memset(g,0,sizeof(g));memsetC0,sizeof(c)); for(i=0; i<m;i++) {scanf("%d%d", &u,&v); u--; v--; c[u]++; c[v]++; g[u][v]=g[v][u]=1; }intst=0;intnum=0; for(i=0; i<n;i++) {if(c[i]%2==1) {st=i; num++; } }if(num==0|| num==2) Fleury (ST);Else printf("eorr\n"); }return 0;}#include <stdio.h>#include <string.h>#include <algorithm>using namespace STD;struct{intTopintnode[ $];} Sintg[ $][ $],c[ $],n,m;voidDfsintx) {intI s.top++; S.node[s.top]=x; for(i=0; i<n;i++) {if(g[i][x]>0) {g[i][x]=g[x][i]=0; DFS (i); Break; } }}voidFleury (intST) {intU,v,i,f; s.top=0; s.node[s.top]=st; while(s.top>=0) {U=s.node[s.top]; f=0; for(i=0; i<n;i++) {if(g[u][i]>0) {f=1; Break; } }if(f) {s.top--; DFS (U); }Else{printf("%d", u+1); s.top--; } }}intMain () {intU,v,i,j; while(~scanf("%d%d", &n,&m)) {memset(g,0,sizeof(g));memsetC0,sizeof(c)); for(i=0; i<m;i++) {scanf("%d%d", &u,&v); u--; v--; c[u]++; c[v]++; g[u][v]=g[v][u]=1; }intst=0;intnum=0; for(i=0; i<n;i++) {if(c[i]%2==1) {st=i; num++; } }if(num==0|| num==2) Fleury (ST);Else printf("eorr\n"); }return 0;}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
Graph theory: Fleury algorithm