首页 > 其他 > 详细

汉诺塔实现(含数组修改)Implement of hanoi

时间:2014-04-07 20:24:16      阅读:339      评论:0      收藏:0      [点我收藏+]

汉诺塔的实现,包含伪代码,以及输出流程版本和修改数组版本。

#include <iostream>
using namespace std;

void hanoiPseudocode(int n, char A, char B, char C)
{
	如果是一个盘子
		直接将盘子从A移到C;
	
	否则
		将 n-1个盘子借助C移到B;
		直接将盘子从A移到C;
		将B上的n-1个盘子借助A移到C;
	
}
void hanoi(int n, char x, char y, char z)
{
	if(n == 1)
		cout << "move " << n << " from " << x << " to " << z << "\n";
	else
	{
		hanoi(n-1,x,z,y);
		cout << "move " << n << " from " << x << " to " << z << "\n";
		hanoi(n-1,y,x,z);
	}
}

void Move(int size,int *x, int *z)
{
	int i = 0, j = 0;
	while (x[i]!=-1 && i < size) i++;
	while (z[j]!=-1 && j < size) j++;
	z[j] = x[i-1];
	x[i-1] = -1;

	for (int i = 0; i < size; i++)
	{
		cout << x[i] << " ";
	}
	cout << "\n";
	for (int i = 0; i < size; i++)
	{
		cout << z[i] << " ";
	}
	cout << "\n";
}
void HanoiMove(int n, int size, int *x, int *y, int *z)
{
	if(n == 1)
		Move(size,x,z);
	
	else
	{
		HanoiMove(n-1,size,x,z,y);
		Move(size,x,z);
		HanoiMove(n-1,size,y,x,z);
	}
}
int main()
{
	int n = 3;
	hanoi(n,‘A‘,‘B‘,‘C‘);
	int a[] = {3,2,1};
	int b[3] = {-1,-1,-1};
	int c[3] = {-1,-1,-1};
	HanoiMove(n,n,a,b,c);
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << "\n";
	for (int i = 0; i < n; i++)
	{
		cout << b[i] << " ";
	}
	cout << "\n";
	for (int i = 0; i < n; i++)
	{
		cout << c[i] << " ";
	}
	cout << "\n";
	return 0;
}


汉诺塔实现(含数组修改)Implement of hanoi,布布扣,bubuko.com

汉诺塔实现(含数组修改)Implement of hanoi

原文:http://blog.csdn.net/pyang1989/article/details/23111621

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!