汉诺塔的实现,包含伪代码,以及输出流程版本和修改数组版本。
#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