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与XML的PDF文档生成技术
Oct 09 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
php数组中删除元素的实现代码
Jun 22 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
Jun 20 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
php获取新浪微博数据API实例
Nov 12 PHP
CodeIgniter使用smtp服务发送html邮件的方法
Jun 10 PHP
提高php编程效率技巧
Aug 13 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
laravel框架如何设置公共头和公共尾
Oct 22 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
2015/05/12 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
PDO::_construct讲解
2019/01/27 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
Jquery 实现grid绑定模板
2015/01/28 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
vue路由组件按需加载的几种方法小结
2018/07/12 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
python 计算文件的md5值实例
2017/01/13 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
外科实习自我鉴定
2013/10/06 职场文书
企业总经理职责
2014/02/02 职场文书
新年爱情寄语
2014/04/08 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
Python 如何利用ffmpeg 处理视频素材
2021/11/27 Python
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript