您的位置:首页 > 其它

汉诺塔问题求解

2014-08-07 21:52 232 查看
汉诺塔问题求解

问题描述:A,B,C三个柱子,其中A插着n个盘子从上到下按照小到大放,尝试以B盘子为中介,每次移一次,将A中的盘子从上到下按照小到大插;

算法:n个盘子全放在A上面,分为两步走:将前面(n-1)个盘子全部放到B上面,然后将第n个盘子放到C中;

这样子B中就有(n-1)个盘子,再以A为中介,全部放到C中。

数学建模:

设n个盘子需要放An次,

An=A(n-1)+1+A(n-1);n=a,An=1;

通过简单的迭代,即可求出An=2^n-1;

程序实现:

hanoi(n,A,B,C)

=Move(A,C) if(n=1)

hanoi(n-1,A,C,B);

Move(A,C)

hanoi(n-1,B,A,C)

#include "stdafx.h"
#include "iostream"
using namespace std;
void  move(char A,char B)
{
//	char A,B;
printf("%c-------%c\n",A,B);
}

void hanoi(int n,char A,char B,char C)
{
// 	int n;
//	char A,B,C;
if(n==1)
move(A,C);
else
{
hanoi(n-1,A,C,B);
move(A,C);
hanoi(n-1,B,A,C);
}
}

int main()
{
int n;
cin>>n;
// char A,B,C;
hanoi(n,'A','B','C');
while(1);
return 0;
}
运行代码如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: