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语法速查表
Dec 06 PHP
php的正则处理函数总结分析
Jun 20 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
Dec 21 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
Jun 18 PHP
PHP 如何利用phpexcel导入数据库
Aug 24 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
php算法实例分享
Jul 14 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
Nov 15 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 18 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自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
js中数组Array的一些常用方法总结
2013/08/12 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
同一个网页中实现多个JavaScript特效的方法
2015/02/02 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
Angular.js回顾ng-app和ng-model使用技巧
2016/04/26 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
JS实现物体带缓冲的间歇运动效果示例
2016/12/22 Javascript
详解mpvue开发小程序小总结
2018/07/25 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
Jquery Datatables的使用详解
2020/01/30 jQuery
vue实现循环滚动列表
2020/06/30 Javascript
Python类的用法实例浅析
2015/05/27 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
python最长回文串算法
2018/06/04 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
python实现名片管理系统
2018/11/29 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
物业管理公司实习生自我鉴定
2013/09/19 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
会议室管理制度范本
2015/08/06 职场文书