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 07 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
php下mysql数据库操作类(改自discuz)
Jul 03 PHP
PHP的博客ping服务代码
Feb 04 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 PHP
php数组去重实例及分析
Nov 26 PHP
php调用c接口无错版介绍
Mar 11 PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
PHP实现简单注册登录系统
Dec 28 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
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
php通过COM类调用组件的实现代码
2012/01/11 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
extjs render 用法介绍
2013/09/11 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
JS面试题---关于算法台阶的问题
2016/07/26 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
python编写分类决策树的代码
2017/12/21 Python
python实现外卖信息管理系统
2018/01/11 Python
实例介绍Python中整型
2019/02/11 Python
由面试题加深对Django的认识理解
2019/07/19 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
python super()函数的基本使用
2020/09/10 Python
Python try except else使用详解
2021/01/12 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
写自荐信要注意什么
2013/12/26 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
2014年毕业演讲稿范文
2014/05/13 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang