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的魔术方法__get()和__set()使用介绍
Sep 19 PHP
php中{}大括号是什么意思
Dec 01 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
PHP多线程类及用法实例
Dec 03 PHP
php中的常用魔术方法汇总
Feb 14 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
php tpl模板引擎定义与使用示例
Aug 09 PHP
PHP递归统计系统中代码行数
Sep 19 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
PHP预定义接口――Iterator用法示例
Jun 05 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
xml+php动态载入与分页
2006/10/09 PHP
ThinkPHP3.1.3版本新特性概述
2014/06/19 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
总结Javascript中的隐式类型转换
2016/08/24 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
2018/02/03 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
[08:40]Navi Vs Newbee
2018/06/07 DOTA
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
python编程嵌套函数实例代码
2018/02/11 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
2014/05/15 HTML / CSS
印度在线购物网站:Paytmmall
2019/07/24 全球购物
物业管理大学生个人的自我评价
2013/10/10 职场文书
消防安全员岗位职责
2014/03/10 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
市场营销工作计划书
2014/09/15 职场文书
教师党员整改措施
2014/10/24 职场文书
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
threejs太阳光与阴影效果实例代码
2022/04/05 Javascript