📅  最后修改于: 2020-12-10 03:56:26             🧑  作者: Mango
1.这是一个经典问题,您尝试仅使用三个销将所有磁盘从一个销移动到另一个销。
2.最初,所有磁盘都堆叠在一起,较大的磁盘位于较小的磁盘下面。
3.尝试重新放置所有磁盘时,可以将磁盘移动到三个销钉中的任何一个,但是不能将较大的磁盘放在较小的磁盘上,并且一次只能转移一个磁盘。
通过分而治之算法可以轻松解决此问题
在上述第7步中,将钉销A的所有磁盘都转移到C并满足以下条件:
令T(n)为将n个磁盘从钉A移到钉C所需的总时间
因此,总耗时T(n)= T(n-1)+1+ T(n-1)
河内塔的关系公式为:
我们得到
它是具有公共比率,r = 2的几何级数级数
第一项,a = 1(2 0 )
当我们必须将n个磁盘从一个钉移到另一个钉时,B方程是河内技术塔所需的复杂性。
T(3)= 2 3-1
= 8-1 = 7安
[在概念上,我们已经证明了将由通用方程式证明的7个步骤]
#include
void towers(int, char, char, char);
int main()
{
int num;
printf ("Enter the number of disks : ");
scanf ("%d", &num);
printf ("The sequence of moves involved in the Tower of Hanoi are :\n");
towers (num, 'A', 'C', 'B');
return 0;
}
void towers( int num, char from peg, char topeg, char auxpeg)
{
if (num == 1)
{
printf ("\n Move disk 1 from peg %c to peg %c", from peg, topeg);
return;
}
Towers (num - 1, from peg, auxpeg, topeg);
Printf ("\n Move disk %d from peg %c to peg %c", num, from peg, topeg);
Towers (num - 1, auxpeg, topeg, from peg);
}
输出:
Enter the number of disks: 3
The sequence of moves involved in the Tower of Hanoi is
Move disk 1 from peg A to peg C
Move disk 2 from peg A to peg B
Move disk 1 from peg C to peg B
Move disk 3 from peg A to peg C
Move disk 1 from peg B to peg A
Move disk 2 from peg B to peg C
Move disk 1 from peg A to peg