版权声明:转就转吧~~记得声明噢~~ https://blog.csdn.net/Soul_97/article/details/82659585
服了这破CSDN 写了一大篇 没给我保存上
直接放代码了
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
const int INF = 0x3f3f3f3f;
long long k[N],tmp[N];
int n;
void init()
{
for(int i = 1;i < N;i ++)
{
tmp[i] = INF;
for(int j = 1;j <= i;j ++)
{
long long t = 2 * tmp[i-j] + 1LL*pow(2,j) - 1;
if(t < tmp[i])
{
tmp[i] = t;
k[i] = j;
}
}
}
}
void Move(char a,char b)
{
printf("%c --> %c\n",a,b);
}
void Hanoi3(int x,char a,char b,char c)
{
if(x == 1)
Move(a,c);
else{
Hanoi3(x-1,a,c,b);
Move(a,c);
Hanoi3(x-1,b,a,c);
}
}
void Hanoi4(int x,char a,char b,char c,char d)
{
if(x == 1)
Move(a,d);
else{
int tk = k[x];
Hanoi4(x-tk,a,c,d,b);
Hanoi3(tk,a,c,d);
Hanoi4(x-tk,b,a,c,d);
}
}
int main()
{
init();
cin >> n;
Hanoi4(n,'A','B','C','D');
return 0;
}