HDU 2181 哈密顿绕行世界问题
这个就是一深搜,不解释,还有,测试数据太弱了。
#include<stdio.h> #include<string.h> int map[23][4],des[23],num[23],f,n; void DFS( int p,int nu ) { if( nu == 20 && ( map[p][1] == n || map[p][2] == n || map[p][3] == n ) ) { printf( "%d: ",++f ); for( int i = 0; i < 20; ++i ) printf( "%d ",num[i] ); printf( "%d\n",n ); } for( int i = 1; i <= 3; ++i ) { int po = map[p][i]; if( !des[po] ) { des[po] = 1; num[nu] = po; DFS( po,nu+1 ); des[po] = 0; } } } int main( ) { for( int i = 1; i <= 20; ++i ) scanf( "%d%d%d",&map[i][1],&map[i][2],&map[i][3] ); while( scanf( "%d",&n ),n ) { memset( des,0,sizeof( des ) ); f = 0; num[0] = n; des[n] = 1; DFS( n,1 ); } return 0; }
本人还是新手 ,转载请注明来自Lvsi‘s home