#include <stdio.h>
void move( int n , char x ,char y )//将第n号盘子从棒x移动到棒y
{
printf("将第%d号盘子从棒%c移动到棒%c\n",n,x,y);
}
/*
递归思路:
假设A,B,C三根棒,初始状态时,A棒上放着若干个圆盘(n个),将其移动到C棒上,中途可以在B棒中暂时放置圆盘。;
(1)如果只有一个圆盘,则把该圆盘从A放到C完成任务。
(2)如果圆盘个数n>1,移动圆盘的过程可以分为三步:
第一步:将A棒上的n-1个圆盘移动到B棒上;
第二步:将A棒上的一个圆盘(原本的第n个圆盘)移动到C棒上;
第三步:将B棒上的n-1个圆盘移动到C棒上。
*/
/************************************************************************/
/*
void moveHanoi ( char A , char B , char C , int n) A,B ,C 分别代表棒符(A,B,C取值为 'A','B','C'中的任意)
函数意义:将棒A中的n个盘子借助棒B放入棒C */
/************************************************************************/
void moveHanoi ( char A , char B , char C , int n)
{
if ( n == 1 )//如果只有一个圆盘,则把该圆盘从A放到C完成任务。
{
move(1,A,C);
}
else
{
//如果圆盘个数n>1,移动圆盘的过程可以分为三步:
moveHanoi(A,C,B,n-1);//第一步:将A棒上的n-1个圆盘移动到B棒上;
move(n,A,C);//第二步:将A棒上的一个圆盘(原本的第n个圆盘)移动到C棒上;
//第三步:将B棒上的n-1个圆盘移动到C棒上。
moveHanoi(B,A,C,n-1);
}
}
int main()
{
moveHanoi('A','B','C',3);
return 0 ;
}
void move( int n , char x ,char y )//将第n号盘子从棒x移动到棒y
{
printf("将第%d号盘子从棒%c移动到棒%c\n",n,x,y);
}
/*
递归思路:
假设A,B,C三根棒,初始状态时,A棒上放着若干个圆盘(n个),将其移动到C棒上,中途可以在B棒中暂时放置圆盘。;
(1)如果只有一个圆盘,则把该圆盘从A放到C完成任务。
(2)如果圆盘个数n>1,移动圆盘的过程可以分为三步:
第一步:将A棒上的n-1个圆盘移动到B棒上;
第二步:将A棒上的一个圆盘(原本的第n个圆盘)移动到C棒上;
第三步:将B棒上的n-1个圆盘移动到C棒上。
*/
/************************************************************************/
/*
void moveHanoi ( char A , char B , char C , int n) A,B ,C 分别代表棒符(A,B,C取值为 'A','B','C'中的任意)
函数意义:将棒A中的n个盘子借助棒B放入棒C */
/************************************************************************/
void moveHanoi ( char A , char B , char C , int n)
{
if ( n == 1 )//如果只有一个圆盘,则把该圆盘从A放到C完成任务。
{
move(1,A,C);
}
else
{
//如果圆盘个数n>1,移动圆盘的过程可以分为三步:
moveHanoi(A,C,B,n-1);//第一步:将A棒上的n-1个圆盘移动到B棒上;
move(n,A,C);//第二步:将A棒上的一个圆盘(原本的第n个圆盘)移动到C棒上;
//第三步:将B棒上的n-1个圆盘移动到C棒上。
moveHanoi(B,A,C,n-1);
}
}
int main()
{
moveHanoi('A','B','C',3);
return 0 ;
}