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


Posted in PHP onAugust 06, 2018

本文实例讲述了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实现的解汉诺塔问题算法示例

PHP代码实现:

/**
 * 汉诺塔(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根柱子的汉诺塔,怎么移动效率最高?

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP分页显示制作详细讲解
Oct 09 PHP
PHP新手上路(七)
Oct 09 PHP
用php+javascript实现二级级联菜单的制作
May 06 PHP
PHP 实用代码收集
Jan 22 PHP
GBK的页面输出JSON格式的php函数
Feb 16 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
详解PHP导入导出CSV文件
Nov 03 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 30 PHP
PHP实现普通hash分布式算法简单示例
Aug 06 #PHP
PHP实现的无限分类类库定义与用法示例【基于thinkPHP】
Aug 06 #PHP
PHP常用字符串函数小结(推荐)
Aug 05 #PHP
PHP使用标准库spl实现的观察者模式示例
Aug 04 #PHP
PHP设计模式之观察者模式定义与用法示例
Aug 04 #PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
Aug 04 #PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 #PHP
You might like
PHP下几种删除目录的方法总结
2007/08/19 PHP
php不用正则采集速度探究总结
2008/03/24 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
初识javascript 文档碎片
2010/07/13 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
JavaScript Split()方法
2015/12/18 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
从0开始学Vue
2016/10/27 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
Python的信号库Blinker用法详解
2020/12/31 Python
文秘专业自荐信
2013/10/14 职场文书
小学教师事迹材料
2014/01/13 职场文书
金融事务专业求职信
2014/04/25 职场文书
预备党员综合考察材料
2014/05/31 职场文书
消防安全宣传口号
2014/06/10 职场文书
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
一年级小学生评语大全
2014/12/25 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
国际最新研究在陨石中发现DNA主要成分 或由陨石带来地球
2022/04/29 数码科技