主要思想:
函数Hanoi4:
先将A柱子上分为两部分n-k个盘子 和k个盘子
第一步:将A柱上方n–k个盘子经过C、D柱移至B柱。
第二步:将A柱所剩的k个盘子经过C柱移至D柱。
第三步:将B柱上的所有盘子经过A、C柱移至D柱。
函数Hanoi3:
(三柱汉诺塔算法)
1)、将A柱上方k-1个盘子经过B柱移至C柱。
2)、将C柱上最后一个盘子直接移至C盘。
3)、将B柱上所有盘子经过A柱移至C柱。
其中需要FourPegsHanoi算法得到最少移动次数f(i)
#include<cstdio>
#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace std;
void three(int x,char a,char b,char c)
{
if(x == 1){
cout<<a<<"->"<<c<<endl;
}
else{
three(x-1,a,c,b);
cout<<a<<"->"<<c<<endl;
three(x-1,b,a,c);
}
}
void four(int x,char a,char b,char c,char d)
{
if(x == 1)
cout<<a<<"->"<<d<<endl;
else{
int k=x/2;
four(x-k,a,c,d,b);
three(k,a,c,d);
four(x-k,b,a,c,d);
}
}
int main()
{
int n;
cin >> n;
four(n,'A','B','C','D');
return 0;
}