欧拉回路,采用递归的方法。采用递归的方法实现。
/*
ID:bysen
LANG:C++
PROG:fence
*/
#include<stdio.h>
#include<stack>
#define MAXN 501
#define MAXF 1025
using namespace std;int map[MAXN][MAXN]={0};
int circuit[MAXF];
int nodenum;
int maxnode=0;
int degree[MAXN]={0};
int N;int max( int a,int b ){ return a>b?a:b; }void work(int start)
{bool found=false;for( int i=1;i<=maxnode;i++ ){if( map[start][i] ){map[start][i]--;map[i][start]--;work(i);found=true;}}circuit[nodenum++]=start;
}int main()
{freopen( "fence.in","r",stdin );freopen( "fence.out","w",stdout );scanf( "%d",&N );for( int i=1;i<=N;i++ ){int u,v;scanf( "%d %d",&u,&v );maxnode=max(maxnode,u);maxnode=max(maxnode,v);degree[u]++;degree[v]++;map[u][v]++;map[v][u]++;}int start;for( int i=1;i<=maxnode;i++ )if( degree[i]%2==1 ){start=i;break;}degree[start]--;work(start);for( int i=nodenum-1;i>=0;i-- )printf( "%d\n",circuit[i] );return 0;
}