双色汉诺塔问题

双色汉诺塔问题:圆盘最初是混合颜色的从小到大排好的,现在要求根据其颜色分开到两个柱子上分别从小到大排好。三色汉诺塔问题可与此类似,分别是排到三个柱子上。

与汉诺塔问题类似,稍作一点改动,假设柱子的编号为ABC,共有n个圆盘(n为偶数)

1.将最上面的n-1个圆盘从A移动到B上面

2.将底部那个圆盘从A移动到C

3.将B柱上的n-2个圆盘移动到A上,从而形成了第二个图那样的情景


因此,可以根据一个递归的解法来解决此问题


双色汉诺塔问题_第1张图片

//双色汉诺塔问题
#include
using namespace std;

int removeTimes = 0;
void hanoiorignal(int nmovnum, char czsource, char cztemp, char czdes)
{
	if (nmovnum == 0)
	{
		return;
	}
	else if (nmovnum == 1)
	{
		cout<<"move the "< 0; i-= 2)
	{
		hanoiorignal(ndisk, szsource, sztemp, szdes);
	}
	cout<<"总共移动次数为:"<>ndisknum;
	while (ndisknum)
	{
		hanoitwocolor(ndisknum);
		cout<<"输入塔上的盘碟数目,必须是2的倍数,输入0结束"<>ndisknum;
	}

	system("pause");
}
输入共有6个圆盘,输出结果如下:

双色汉诺塔问题_第2张图片




你可能感兴趣的:(趣味算法系列,趣味算法设计)