当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

编程实例:Hanoi塔问题的C++代码

    Hanoi塔问题,这是一个古典的数学问题,是一个只有用递归方法解决的问题。问题是这样的:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在上,小盘在下。在移动过程中可以利用B座。
 
    将n个盘子从A座移到C座可以分解为以下3个步骤:

    (1).将A上n-1个盘借助C座先移到B座上;

    (2).把A座上剩下的一个盘移到C座上;

    (3).将B上n-1个盘借助A座先移到C座上。

    程序如下:

 #i nclude <stdio.h>

void move(char x,char y)

{ static int i=0;

  printf(\"%3d.%c-->%c\\n\",++i,x,y);

}

void hanoi(int n,char one,char two,char three)

{ /* 将n个盘子从one座借助two座,移到three座 */

  if(n==1) move(one,three);

  else

  { hanoi(n-1,one,three,two);

    move(one,three);

    hanoi(n-1,two,one,three);

  }

}

void main()

{
  int m;

  printf(\"输入盘子数(最好2~9之间):\");

  scanf(\"%d\",&m);

  printf(\"移动%d个盘子的步骤为:\\n\",m);

  hanoi(m,\'A\',\'B\',\'C\');

}


    输出结果为(红色为键盘输入的数据):

    输入盘子数(最好2~9之间):3

    移动3个盘子的步骤为:

    1.A-->C

    2.A-->B

    3.C-->B

    4.A-->C

    5.B-->A

    6.B-->C

    7.A-->C

相关内容
赞助商链接