如何解决河内塔的问题
问题:
首先,摆脱原有的神话色彩:寺庙、僧侣、世界末日,来到问题的数学本质。有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);
}
}