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 }