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初学者们头痛的十四个问题
Jan 15 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
php 注册时输入信息验证器的实现详解
Jul 05 PHP
php 不使用js实现页面跳转
Feb 11 PHP
php静态文件返回304技巧分享
Jan 06 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
php给一组指定关键词添加span标签的方法
Mar 31 PHP
使用xampp搭建运行php虚拟主机的详细步骤
Oct 21 PHP
php实现搜索类封装示例
Mar 31 PHP
全面了解PHP中的全局变量
Jun 17 PHP
PHP之十六个魔术方法详细介绍
Nov 01 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连接Access数据库错误及解决方法
2013/06/20 PHP
分享PHP函数实现数字与文字分页代码
2015/07/28 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
PHP文件操作简单介绍及函数汇总
2020/12/11 PHP
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
jQuery中size()方法用法实例
2014/12/27 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
vue+element-ui JYAdmin后台管理系统模板解析
2020/07/28 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
Python编写百度贴吧的简单爬虫
2015/04/02 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
快速查询Python文档方法分享
2017/12/27 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
python3中rank函数的用法
2019/11/27 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
写自荐信三大法宝
2014/01/24 职场文书
报关专员求职信范文
2014/02/22 职场文书
安全教育演讲稿
2014/05/09 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
小学见习报告
2014/10/31 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python