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获取类中常量,属性,及方法列表的方法
Apr 09 PHP
深入PHP内存相关的功能特性详解
Jun 08 PHP
php ci框架验证码实例分析
Jun 26 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
Nov 19 PHP
php按单词截取字符串的方法
Apr 07 PHP
php数组随机排序实现方法
Jun 13 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
PHP7 foreach() 函数修改
Mar 09 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 工厂模式使用方法
2010/05/18 PHP
在PHP中运行Linux命令并启动SSH服务的例子
2014/06/12 PHP
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
使用Browserify配合jQuery进行编程的超级指南
2015/07/28 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
vue实现输入框自动跳转功能
2020/05/20 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Python实现简单http服务器
2018/04/12 Python
python实战教程之自动扫雷
2018/07/13 Python
Django缓存系统实现过程解析
2019/08/02 Python
python 公共方法汇总解析
2019/09/16 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
详解python中各种文件打开模式
2020/01/19 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
Agoda台湾官网:国内外订房2折起
2018/03/20 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
销售自我评价
2013/10/22 职场文书
财务管理专业求职信
2014/06/11 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
整改通知书格式
2015/04/22 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
Window server中安装Redis的超详细教程
2021/11/17 Redis
Python学习之迭代器详解
2022/04/01 Python
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers