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 相关文章推荐
基于文本的留言簿
Oct 09 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
利用php下载xls文件(自己动手写的)
Apr 18 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
Nov 15 PHP
php中fsockopen用法实例
Jan 05 PHP
php中namespace及use用法分析
Dec 06 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
php 调用百度sms来发送短信的实现示例
Nov 02 PHP
laravel实现前后台路由分离的方法
Oct 13 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 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
php 在线打包_支持子目录
2008/06/28 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
javascript实现随时变化着的背景颜色
2015/04/02 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
浅谈jquery中next与siblings的区别
2016/10/27 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
Vue看了就会的8个小技巧
2021/01/21 Vue.js
详解Python中的array数组模块相关使用
2016/07/05 Python
Python中的__slots__示例详解
2017/07/06 Python
Python分析学校四六级过关情况
2017/11/22 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
python 解压pkl文件的方法
2018/10/25 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
python中关于数据类型的学习笔记
2020/07/19 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
python字典按照value排序方法
2020/12/28 Python
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
彪马美国官网:PUMA美国
2017/03/09 全球购物
SHEIN香港:价格实惠的女性时尚服装
2018/08/14 全球购物
预备党员思想汇报范文
2014/01/11 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
HTML基础详解(上)
2021/10/16 HTML / CSS