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与MySQL交互使用详解
Oct 09 PHP
php addslashes 函数详细分析说明
Jun 23 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
php调用Google translate_tts api实现代码
Aug 07 PHP
zf框架db类的分页示例分享
Mar 14 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
php限制ip地址范围的方法
Mar 31 PHP
PHP执行linux命令常用函数汇总
Feb 02 PHP
WordPress分页伪静态加html后缀
Jun 08 PHP
laravel5.2实现区分前后台用户登录的方法
Jan 11 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 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获取MAC地址的函数代码
2011/09/11 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
22点关于jquery性能优化的建议
2014/05/28 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
vue 组件简介
2020/07/31 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
Python 异常处理实例详解
2014/03/12 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
详解如何管理多个Python版本和虚拟环境
2019/05/10 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
Django中ORM的基本使用教程
2020/12/22 Python
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
师范应届生求职信
2013/11/15 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
推普标语口号大全
2015/12/26 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript
Python实现双向链表
2022/05/25 Python
mysql数据库实现设置字段长度
2022/06/10 MySQL