分析:
我这个人就是有个毛病,喜欢考古
这道题几年前就知道思路了,
但是今天看起来,实现的时候还有些小问题
所以干脆借这道题回顾一下递归的想法
题目已经给出了3个物体的移动方法
实际上,三个柱子的状态只会有以下几种:
1.A柱子上从小到大排列好了n个物体,B空,C空
这种情况下,很显然我们需要把n-1个物体从A–>B,
最大的第n个就可以直接移动到C,
显然现在的状态变成了:
2.A空,B有n-1个按照规定摆放的物体,C有一个最大的物体
这种情况下,就和第一种状态大同小异,
把B上的n-1个物体移动到A,第n-1个直接从B移动到C
现在状态就回归了1
这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
char ch[100];
void doit(int now,int x,int y,int z) //物体在x上,目标是z
{
if (now==1)
{ //只有一个就直接移动
printf("%d:%c->%c
",now,ch[x],ch[z]);
return;
}
doit(now-1,x,z,y);
printf("%d:%c->%c
",now,ch[x],ch[z]);
doit(now-1,y,x,z);
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=3;i++) cin>>ch[i];
doit(n,1,2,3);
return 0;
}