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 相关文章推荐
深入了解php4(2)--重访过去
Oct 09 PHP
在php MYSQL中插入当前时间
Apr 06 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
PHP文件上传原理简单分析
May 29 PHP
PHP版国家代码、缩写查询函数代码
Aug 14 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
php实现点击可刷新验证码
Nov 07 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
PHP中SQL查询语句的id=%d解释(推荐)
Dec 10 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
Aug 04 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
Mac下关于PHP环境和扩展的安装详解
Oct 17 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
js 用CreateElement动态创建标签示例
2013/11/20 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
JavaScript模拟push
2016/03/06 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
Vue 全局loading组件实例详解
2018/05/29 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
[00:59]DOTA2英雄背景故事——上古巨神
2020/06/28 DOTA
9种python web 程序的部署方式小结
2014/06/30 Python
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python selenium循环登陆网站的实现
2019/11/04 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
简单了解如何封装自己的Python包
2020/07/08 Python
CSS3教程(8):CSS3透明度指南
2009/04/02 HTML / CSS
售后服务科岗位职责范文
2013/11/13 职场文书
兼职学生的自我评价
2013/11/24 职场文书
上班睡觉检讨书
2014/01/09 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
新员工入职欢迎词
2015/01/23 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android