汉诺塔

来源:互联网 发布:java static方法 编辑:程序博客网 时间:2024/06/05 19:14
#include <stdio.h>int steps; // 统计步数 /*    @function:  输出盘子移动的方向    @param:     x-->盘子原来的位置                y-->盘子移到的位置    @return:    void*/void move(char x, char y){    // 步数自增一并输出步数和移动方向     printf("第 %d 步 : %c =========> %c\n", ++steps, x, y);}/*    @function:  n个盘子在b柱子的帮助下从a柱子移动到c柱子(假设它能做到)    @param:     a-->第一个柱子                b-->第二个柱子                c-->第三个柱子                n-->盘子的个数    @return:    void*/void hanoiTowers(char a, char b, char c, int n){    // 只剩下一个盘子, 直接从a柱子移动到c柱子, 并返回, 不再递归     if (n == 1)    {        move(a, c);        return;    }    // 将n-1个盘子从a柱子借助c柱子移动到b柱子, a柱子剩下一个盘子     hanoiTowers(a, c, b, n - 1);    // a柱子剩下一个盘子, 直接从a柱子移到c柱子     move(a, c);    // 将移到b柱子的n-1个盘子借助a柱子移动到c柱子     hanoiTowers(b, a, c, n - 1);}int main(){    int n; // 盘子个数    while (scanf("%d", &n) == 1) // 输入盘子个数    {        steps = 0; // 初始化步数为0        hanoiTowers('A', 'B', 'C', n); // 开始移动    }    return 0;}
0 0