如何解决河内塔的问题

问题:

首先,摆脱原有的神话色彩:寺庙、僧侣、世界末日,来到问题的数学本质。有A,b,c三根柱子,A上面叠了N块板,每块板都比下面的那块小。现在需要把所有的盘子都移到C上,前提是一次只能移动一个盘子,任何时候都不能放比它小的盘子在上面(显然必须用B作为中转)。如何移动这些盘子?

求解:

如果你玩这个游戏,你很快就会发现,要想把N个盘子移动到C,必须先把n-1个盘子移动到B,然后把第N个盘子移动到C,最后再移动n-1个盘子。整个过程是这样的:

1,将上述n-1板块从A移动到B,以C为中转;

2.将第n块板从A移到C;

3.将n-1板从B移至C,以A为转运点。

换句话说,要解决n个板块的问题,首先要解决n-1个板块的问题。这个问题和上一个类似,可以用同样的方法解决。最后会出现只有一个板块的情况。直接把板块从A移到c是非常简单的,通过上面的分析,我们可以写成:

void hanoi (int n,char src,char mid,char dst)

{

如果(n == 1)

cout & lt& lt“移动”& lt& ltsrc & lt& lt"收件人" & lt& ltdst & lt& ltendl

其他

{

河内(n-1,src,dst,mid);

cout & lt& lt“移动”& lt& ltsrc & lt& lt"收件人" & lt& ltdst & lt& ltendl

河内(n-1,mid,src,dst);

}

}