zoukankan      html  css  js  c++  java
  • 经典问题之汉诺塔

    汉诺塔问题

    汉诺塔其实想深了会觉得复杂,想简单了,你会觉得不可能吧?

    这就是算法的乐趣

    汉诺塔的递归思想解法很简单,大的问题分解为小的问题求解.

    1.假如只有一个盘子,那么直接从A移动到C盘即可
    2.假如有两个盘子,那借助B,步骤如下:A->B,A->C,B->C
    3.假如有3个甚至更多盘子
    可以运用递归思想了,盘子再多,也都是有规律的,上大下小.
    移动盘子就容易了:

    把除了最后一个盘子外的所有盘子移动到辅助柱子(A->B),
    再把最后那个盘子移动到目标柱子上(A->C),
    最后再把辅助柱子上的盘子,借助A,移动到C上(B->C),这又是一个递归的过程.

    代码如下:

    #include <stdio.h>

    void hanoi(int n, char A, char B, char C) {
    if(n == 1) {
    printf(
    "Move sheet from %c to %c\n", A, C);
    }
    else {
    hanoi(n
    -1, A, C, B);
    hanoi(
    1, A, B, C)
    hanoi(n
    -1, B, A, C);
    }
    }

    int main() {
    int n;
    printf(
    "請輸入盤數:");
    scanf(
    "%d", &n);
    hanoi(n,
    'A', 'B', 'C');
    return 0;
    }

    整理编辑: 东苑草根 zjut
  • 相关阅读:
    297. Serialize and Deserialize Binary Tree
    331. Verify Preorder Serialization of a Binary Tree
    332. Reconstruct Itinerary
    329. Longest Increasing Path in a Matrix
    319. Bulb Switcher
    292. Nim Game
    299. Bulls and Cows
    Ice Cream Tower Gym
    B
    C
  • 原文地址:https://www.cnblogs.com/dycg/p/1781470.html
Copyright © 2011-2022 走看看