• PHP实现的解汉诺塔问题算法示例


    问题描述:

    相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

    解决思路:

    (1)以C盘为中介,从A杆将1至n-1号盘移至B杆;
    (2)将A杆中剩下的第n号盘移至C杆;
    (3)以A杆为中介;从B杆将1至n-1号盘移至C杆。

    PHP代码实现:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    /**
     * 汉诺塔(3根柱子)
     * @param unknown $n
     * @param string $a        // 当前位置
     * @param string $b        // 中转位置
     * @param string $c        // 目标位置
     */
    function hanoi($n,$a='A',$b='B',$c='C'){
      if( $n==1 ){
        echo "{$a}->{$c} <br/>";
      }else{
        hanoi($n-1,$a,$c,$b);    // 将最大盘上的盘子,借助C柱,全部移动到B柱上
        echo "{$a}->{$c} <br/>"// 将最大盘直接从A柱移到C柱
        hanoi($n-1,$b,$a,$c);    // 再将B柱上的盘子,借助A柱,全部移到C柱
      }
    }
    //测试:
    hanoi(3,$a='A',$b='B',$c='C')

    运行结果:

    A->C
    A->B
    C->B
    A->C
    B->A
    B->C
    A->C

    思考:假如是4根柱子的汉诺塔,怎么移动效率最高?

  • 相关阅读:
    关于 python 库config 的相关介绍
    关于usr/bin/ld: cannot find -lxxx问题总结
    python中argparse模块
    剑指offer——二叉树中和为某一值的路径
    剑指Offer——整数中1出现的次数(从1到n整数中1出现的次数)
    python操作redis集群
    redis-cluster配置
    redis主从同步
    redis不重启,切换RDB备份到AOF备份
    redis持久化RDB与AOF
  • 原文地址:https://www.cnblogs.com/myJuly/p/13354058.html
Copyright © 2020-2023  润新知