/* 按规则搬到塔座z上。y可用作辅助塔座 */ void Hanoi(int n, char x, char y, char z) { if (n == 1) move(x, 1, z); else { Hanoi(n-1, x, z, y); move(x, n, z); Hanoi(n-1, y, x, z); } }
void Hanoi(int n, char x, char y, char z) // move x from x to z, bypass y { void move(char x, int m, char y); if(n==1) { move(x,1,z); } else { Hanoi(n-1,x,z,y); move(x,n,z); Hanoi(n-1,y,x,z); } }
void Hanoi(int n, struct Tower *from, struct Tower *buf, struct Tower *to) { if(n==1) move(from, to); else { Hanoi(n-1, from, to, buf); move(from, to); Hanoi(n-1, buf, from, to); } }
void Hanoi(int n, char A, char B, char C) { if (n == 1) //如果是1, printf("盘子%d,%c->%c\n",n,A,C); //直接将A柱子上的盘子从A移到C; else { Hanoi(n - 1, A, C, B); //将A柱子上的n-1个盘子借助C移到B; printf("盘子%d,%c->%c\n", n, A, C); //直接将A柱子的盘子从A移到C; Hanoi(n - 1, B, A, C); //将B柱子上的n-1个盘子借助A移到C; } return; }
void Hanoi(int n,int *source, int *dest, int *spare) { int i; if(n==1){ Move(source,dest); return; } Hanoi(n-1,source,spare,dest); Move(source,dest); Hanoi(n-1,spare,dest,source); return; }
int main(int argc, char *argv[]) { int n; printf("3个塔座为a、b、c,圆盘最初在a座,借助b座移到c座。请输入圆盘数:"); scanf("%d", &n); Hanoi(n,'a', 'b', 'c'); return 0; }
int main() { void Hanoi(int n, char x, char y, char z); printf("How many scales the Hanoi has on X?\n"); int n; scanf("%d",&n); Hanoi(n,'X','Y','Z'); return 0; }
int main() { char ch1 = 'A'; char ch2 = 'B'; char ch3 = 'C'; int n; printf("请输入要移动盘子的个数:"); scanf("%d",&n); Hanoi(n, 'A', 'B', 'C'); return 0; }
/* void Move(int n, int start, int goal, int temp) { if(n==0) return; Move(n-1, start, temp, goal); printf("%c -> %c\n", 'a'+start-1, 'a'+goal-1); Move(n-1, temp, goal, start); } */ int main() { // int i; int n; ERROR.N = -1; /* ERROR是ElementType的特殊值,标志错误 */ scanf("%d", &n); // start = clock(); /* 开始计时 */ // for (i=0; i<10; i++) Hanoi(n); /* Move(n, 1, 3, 2); */ // stop = clock(); /* 停止计时 */ // duration = ((double)(stop - start))/CLK_TCK; /* 计算运行时间 */ // printf("duration=%lf\n", duration/10); return 0; }
void main() { struct Tower *T1, *T2, *T3; int i; T1=create('A'); T2=create('B'); T3=create('C'); for(i=N; i>0; i--) { push(T1, i); } Hanoi(N, T1, T2, T3); free(T1); free(T2); free(T3); free(T1->plate); free(T2->plate); free(T3->plate); }
void main() { a = 16807; m = 127; m = m * 256 + 255; m = m * 256 + 255; m = m * 256 + 255; q = m / a; r = m % a; Factorial(7); WriteLong(res); WriteLine(); WriteLine(); FibRec(11); WriteLong(res); WriteLine(); WriteLine(); Hanoi(3); WriteLine(); }
int main() { int i; /* initialize the towers */ for(i=0;i<N;i++)A[i]=i+1; for(i=0;i<N;i++)B[i]=0; for(i=0;i<N;i++)C[i]=0; printf("Solution of Tower of Hanoi Problem with %d Disks\n\n",N); /* Print the starting state */ printf("Starting state:\n"); PrintAll(); printf("\n\nSubsequent states:\n\n"); /* Do it! Use A = Source, B = Destination, C = Spare */ Hanoi(N,A,B,C); return 0; }