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 相关文章推荐
解决中英文字符串长度问题函数
Jan 16 PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
php项目中百度 UEditor 简单安装调试和调用
Jul 15 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 PHP
laravel框架关于搜索功能的实现
Mar 15 PHP
PHP迭代器和迭代的实现与使用方法分析
Apr 19 PHP
实例解析php的数据类型
Oct 24 PHP
YII框架关联查询操作示例
Apr 29 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排序算法(冒泡排序,快速排序)
2012/10/09 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
JQuery自适应IFrame高度(支持嵌套 兼容IE,ff,safafi,chrome)
2011/03/28 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
tangram.js库实现js类的方式实例分析
2018/01/06 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
JS打印彩色菱形的实例代码
2018/08/15 Javascript
通过Python实现自动填写调查问卷
2017/09/06 Python
python中append实例用法总结
2019/07/30 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
人事专员岗位职责
2013/11/20 职场文书
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
工程造价专业大学生职业规划范文
2014/03/09 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
2014年教务处工作总结
2014/12/03 职场文书
西双版纳导游词
2015/02/03 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js