#include<stdio.h>
//将n个盘子A->C借助B
void move(int n,char a,char b,char c)
{
if(n==1)
{
printf("%c->%c\n",a,c);
printf("%c->%c\n",a,c);
}
else
{
move(n-1,a,c,b);
printf("%c->%c\n",a,c);
printf("%c->%c\n",a,c);
move(n-1,b,a,c);
}
}
//根据颜色移动
void ColorTwoMove(int n,char a,char b,char c)
{
int i=n/2; //分两组,因为只是颜色不同,一次移动两个。
for(;i>1;i--) //下面主要是把两个颜色不一样,大小一样的分开放在两个柱子上。
{
move(i-1,a,c,b); //将2*(i-1)个A->B借助C
move(1,a,b,c); //将A上剩下的两个移动到C上
move(i-1,b,c,a); //将B上的2*(i-1)个 B->A借助C
printf("%c->%c\n",c,b); //C上面现在是两个颜色不一样大小一样的盘子,将其中的1个C->B
}
//下面是最上面的两个的两个大小一样,颜色不一的最小的盘子
printf("%c->%c\n",a,c); //将第一个移动到C上
printf("%c->%c\n",a,b); //将第二个移动到B上
}
int main(){
int n;
printf("请输入盘数:");
scanf("%d",&n);
char a='A';
char b='B';
char c='C';
ColorTwoMove(n,a,b,c);
// move(n,a,b,c);
return 0;
}
来源:https://www.cnblogs.com/lobsterIT/archive/2012/09/27/2706268.html