游戏规则: 有三根相邻的柱子,标号为 A,B,C,A 柱子上从下到上按金字塔状叠放着 n 个不同大小的圆盘,编号从上往下 1 到 n,现在把所有盘子一个一个移动到柱子 C 上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。 代码:
/*************************************************************************
> File Name: hanoi.c
> Author: Netcan
> Mail: 1469709759@qq.com
> Created Time: 2015/1/23 16:32:17
************************************************************************/
/* 盘子从上往下编号,1 到 n
* 当 n == 1 的时候,
* 直接将盘中从“A”柱移到“C”柱
* 当 n >= 2 的时候,
* 先将前 n-1 个盘子从“A”柱借助“C”柱移到“B”柱
* 然后,将第 n 个盘子从“A”柱移到“C”柱
* 最后,将“B”柱上 n-1 个盘子从“B”柱借助“A”柱移到“C”柱
*/
void hanoi(int n, char A, char B, char C); // 表示 n 个盘子从“A”柱借助“B”柱移到“C”柱
#include<stdio.h>
int main()
{
int n;
printf("输入盘子数量:");
scanf("%d",&n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
void hanoi(int n, char A, char B, char C)
{
static int steps = 0;
if ( 1 == n )
printf("第 %d 步: 将编号为 %d 的盘子从 %c 柱移到 %c 柱 \n", ++steps, n, A, C);
else {
hanoi(n-1, A, C, B);
printf("第 %d 步: 将编号为 %d 的盘子从 %c 柱移到 %c 柱 \n", ++steps, n, A, C);
hanoi(n-1, B, A, C);
}
return;
}