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语法(4)
Oct 09 PHP
mysql 搜索之简单应用
Apr 27 PHP
php下删除字符串中HTML标签的函数
Aug 27 PHP
php 执行系统命令的方法
Jul 07 PHP
php中神奇的fastcgi_finish_request
May 02 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
php堆排序实现原理与应用方法
Jan 03 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
PHP微信公众号自动发送红包API
Jun 01 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
php压缩文件夹最新版
Jul 18 PHP
php精度计算的问题解析
Jun 21 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&amp;mysql(二)
2006/10/09 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
php实现webservice实例
2014/11/06 PHP
phalcon框架使用指南
2016/02/23 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
如何提高数据访问速度
2016/12/26 Javascript
ES6新增数据结构WeakSet的用法详解
2017/08/07 Javascript
Javascript中将变量转换为字符串的三种方法
2017/09/19 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
python requests.post带head和body的实例
2019/01/02 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
python集合是否可变总结
2019/06/20 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
电大学习个人自我评价范文
2013/10/04 职场文书
信息工程学院毕业生推荐信
2013/11/05 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
交通安全横幅标语
2014/10/07 职场文书
男方婚前保证书
2015/02/28 职场文书
水知道答案观后感
2015/06/08 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书