C语言中的Hanoi(汉诺塔)问题

 什么是汉诺塔?

     如题: 有n个大小不一盘子由小到大叠在一起, 放在盆A中,还盆B和盆C是空的。

     要求: 将n个盘子依次由小到大移动到盆C中,每次只能移动一个,在移动过程中盘子要始终保持由小到大的叠在一起。

     例如:最简单的是只有3个盘子。 321 3最大,1最小的步骤为:

          1、将21 通过C盆移到B盆。

             A - C;

             A - B;

             C - B;

          2、将3移动到C盆。

             A - C

          3、将21 通过A盆再移动到C盆。

             B - A;

             B - C;

             A - C;

  
  
  
  
  1. #include <stdio.h> 
  2. int main() { 
  3.     void hanoi(int n,char a,char b,char c); 
  4.     int n = 3; 
  5.     char a = 'A',b='B',c='C'
  6.     hanoi(n,a,b,c); 
  7.     return 0; 
  8.  
  9. void hanoi(int n, char a, char b, char c) { 
  10.     void move(char src, char target); 
  11.     if (n == 1) { 
  12.         move(a, c); 
  13.     } else { 
  14.         hanoi(n - 1, a, c, b); 
  15.         move(a, c); 
  16.         hanoi(n - 1, b, a, c); 
  17.     } 
  18.  
  19. void move(char start, char end) { 
  20.     printf("%c > %c \n", start, end); 

打印结果:

A > C 

A > B 

C > B 

A > C 

B > A 

B > C 

A > C 

 

你可能感兴趣的:(C语言,Hanoi(汉诺塔)问题)