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 gbk环境下json_dencode传送来的汉字
Nov 13 PHP
php获取一个变量的名字的方法
Sep 05 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
php实现微信扫码自动登陆与注册功能
Sep 22 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 PHP
设定php简写功能的方法
Nov 28 PHP
TP5框架实现签到功能的方法分析
Apr 05 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
php操作MongoDB类实例
2015/06/17 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
教你使用javascript简单写一个页面模板引擎
2015/05/05 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
基于Vue实例生命周期(全面解析)
2017/08/16 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
python输出100以内的质数与合数实例代码
2018/07/08 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
Selenium常见异常解析及解决方案示范
2020/04/10 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
装潢设计实习自我鉴定
2013/09/19 职场文书
商务日语毕业生自荐信范文
2013/11/14 职场文书
教师应聘个人求职信
2013/12/10 职场文书
读书心得体会
2013/12/28 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
毕业生就业协议书
2014/04/11 职场文书
区级文明单位申报材料
2014/05/15 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
教学反思怎么写
2016/02/24 职场文书
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers