欧拉回路,采用递归的方法。采用递归的方法实现。
/*
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;
}