HDU 1997汉诺塔

View Code 
 1 #include<stdio.h>
 2 #include<stdlib.h>//回溯法运用。模拟汉诺塔过程
 3 
 4 int flag;
 5 void hanor(int n,int *a,int *b,int *c)
 6 {
 7      int i; 
 8      if(!flag)
 9       return ;
10      if(n == 0)
11      {
12          flag = 1;
13          return ;
14      }     
15      if(n == b[1])
16      {
17          flag = 0;
18          return ;
19      }
20      if(a[1] == n)
21      {
22          a[0]--;
23        for(i=1; i<=a[0]; i++)
24          a[i] = a[i+1];       
25        hanor(n-1,a,c,b); 
26      }
27      else if(c[1] == n )
28      {
29         c[0]--;阿 
30         for(i=1; i<=c[0]; i++)
31           c[i] = c[i+1];  
32         hanor(n-1,b,a,c);
33      }         
34 }     
35 int main()
36 {
37     int i,j,ncases,n;
38    int a[65],b[65],c[65];
39     
40     scanf("%d",&ncases);
41     while( ncases-- )
42     {
43        scanf("%d",&n);       
44        scanf("%d",&a[0]);
45        for(i=1; i<=a[0]; i++)  
46          scanf("%d",&a[i]);  
47        scanf("%d",&b[0]);
48        for(i=1; i<=b[0]; i++)
49          scanf("%d",&b[i]); 
50        scanf("%d",&c[0]);
51        for(i=1; i<=c[0]; i++)
52           scanf("%d",&c[i]);
53           flag = 1;
54        hanor(n,a,b,c);    
55        if( flag )
56          printf("true\n");      
57        else
58         printf("false\n"); 
59     }
60    system("pause");
61    return 0;
62 }      
posted @ 2012-08-01 23:18  zhongya  阅读(163)  评论(0编辑  收藏  举报