LeeBlog

导航

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;
}

posted on 2011-05-10 23:23  LeeBlog  阅读(553)  评论(0编辑  收藏  举报