歐拉迴路,採用遞迴的方法。採用遞迴的方法實現。
/*ID:bysenLANG:C++PROG:fence*/#include<stdio.h>#include<stack>#define MAXN 501#define MAXF 1025using 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;}