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&amp;MYSQL分页原理及实现
Jan 02 PHP
FCKeditor的安装(PHP)
Jan 13 PHP
Views rows style模板重写代码
May 16 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
Mar 07 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
laravel 实现设置时区的简单方法
Oct 10 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
CI框架Session.php源码分析
2014/11/03 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
javascript运动详解
2015/07/06 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
浅谈在koa2中实现页面渲染的全局数据
2017/10/09 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
python中mechanize库的简单使用示例
2014/01/10 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
Python3实现二叉树的最大深度
2019/09/30 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
python 对xml解析的示例
2021/02/27 Python
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
十佳班主任事迹材料
2014/01/18 职场文书
建筑投标担保书
2014/05/20 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
党员干部形式主义个人整改措施
2014/09/17 职场文书
干部作风建设工作总结
2014/10/29 职场文书
学生检讨书范文
2015/01/27 职场文书
学生会主席任命书
2015/09/21 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS