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利用header函数实现文件下载时直接提示保存
Nov 12 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
php计算两个日期时间差(返回年、月、日)
Jun 19 PHP
Linux系统下php获得系统分区信息的方法
Mar 30 PHP
PHP自动生成表单代码分享
Jun 19 PHP
php检测文本的编码
Jul 26 PHP
PHP7新特性foreach 修改示例介绍
Aug 26 PHP
iOS10推送通知开发教程
Sep 19 PHP
thinkPHP中_initialize方法实例分析
Dec 05 PHP
彻底搞懂PHP 变量结构体
Oct 11 PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 PHP
Laravel 框架返回状态拦截代码
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创建PDF中文文档
2006/10/09 PHP
一个数据采集类
2007/02/14 PHP
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
js中parseInt函数浅谈
2013/07/31 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
关于Vue.js一些问题和思考学习笔记(2)
2016/12/02 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
[01:00]选手抵达华西村 整装待发备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
python计算时间差的方法
2015/05/20 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
详解django实现自定义manage命令的扩展
2019/08/13 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
武汉某公司的C#笔试题面试题
2015/12/25 面试题
商务主管岗位职责
2013/12/08 职场文书
自我鉴定注意事项
2014/01/19 职场文书
公司薪酬管理制度
2014/01/31 职场文书
学术会议主持词
2014/03/17 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
环保倡议书500字
2014/05/15 职场文书
公司承诺书范文
2014/05/19 职场文书
抗洪救灾标语
2014/10/08 职场文书
《1942》观后感
2015/06/08 职场文书
师范生见习总结范文
2015/06/23 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
企业文化学习心得体会
2016/01/21 职场文书
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers