PHP实现的蚂蚁爬杆路径算法代码


Posted in PHP onDecember 03, 2015

本文实例讲述了PHP实现的蚂蚁爬杆路径算法代码。分享给大家供大家参考,具体如下:

<?php
/**
 * 有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。
 * 木杆很细,不能同时通过一只蚂蚁。开始 时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,
 * 但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。
 * 编写程序,求所有蚂蚁都离开木杆 的最小时间和最大时间。
 */
function add2($directionArr, $count, $i) {
 if(0 > $i) { // 超出计算范围
  return $directionArr;
 }
 if(0 == $directionArr[$i]) { // 当前位加1
  $directionArr[$i] = 1;
  return $directionArr;
 }
 $directionArr[$i] = 0;
 return add2($directionArr, $count, $i - 1); // 进位
}
$positionArr = array( // 所在位置
 3,
 7,
 11,
 17,
 23
);
function path($positionArr) { // 生成测试路径
 $pathCalculate = array();
 $count = count($positionArr);
 $directionArr = array_fill(0, $count, 0); // 朝向
 $end = str_repeat('1', $count);
 while (true) {
  $path = implode('', $directionArr);
  $pathArray = array_combine($positionArr, $directionArr);
  $total = calculate($positionArr, $directionArr);
  $pathCalculate['P'.$path] = $total;
  if($end == $path) { // 遍历完成
   break;
  }
  $directionArr = add2($directionArr, $count, $count - 1);
 }
 return $pathCalculate;
}
function calculate($positionArr, $directionArr) {
 $total = 0; // 总用时
 $length = 27; // 木杆长度
 while ($positionArr) {
  $total++; // 步增耗时
  $nextArr = array(); // 下一步位置
  foreach ($positionArr as $key => $value) {
   if(0 == $directionArr[$key]) {
    $next = $value - 1; // 向0方向走一步
   } else {
    $next = $value + 1; // 向1方向走一步
   }
   if(0 == $next) { // 在0方向走出
    continue;
   }
   if($length == $next) { // 在1方向走出
    continue;
   }
   $nextArr[$key] = $next;
  }
  $positionArr = $nextArr; // 将$positionArr置为临时被查找数组
  foreach ($nextArr as $key => $value) {
   $findArr = array_keys($positionArr, $value);
   if(count($findArr) < 2) { // 没有重合的位置
    continue ;
   } 
   foreach ($findArr as $findIndex) {
    $directionArr[$findIndex] = $directionArr[$findIndex] ? 0 : 1; // 反向处理
    unset($positionArr[$findIndex]); // 防止重复查找计算
   }
  }
  $positionArr = $nextArr; // 将$positionArr置为下一步结果数组
 }
 return $total;
}
$pathCalculate = path($positionArr);
echo '<pre>calculate-';
print_r($pathCalculate);
echo 'sort-';
asort($pathCalculate);
print_r($pathCalculate);

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在线竞拍系统的PHP实现框架(二)
Oct 09 PHP
phpwind中的数据库操作类
Jan 02 PHP
php中$this-&amp;gt;含义分析
Nov 29 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
php实现通过ftp上传文件
Jun 19 PHP
phalcon框架使用指南
Feb 23 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
PHP实现的简单异常处理类示例
May 04 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
Mar 22 PHP
PHP实现QQ空间自动回复说说的方法
Dec 02 #PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 #PHP
thinkphp微信开发(消息加密解密)
Dec 02 #PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 #PHP
PHP接收json 并将接收数据插入数据库的实现代码
Dec 01 #PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 #PHP
PHP简单的MVC框架实现方法
Dec 01 #PHP
You might like
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
function.inc.php超越php
2006/12/09 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
运算符&amp;&amp;的三个不同层次
2013/04/07 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
Python实现登录接口的示例代码
2017/07/21 Python
教你用Python创建微信聊天机器人
2020/03/31 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
教你一步步利用python实现贪吃蛇游戏
2019/06/27 Python
如何使用Python 打印各种三角形
2019/06/28 Python
python下载库的步骤方法
2019/10/12 Python
如何把python项目部署到linux服务器
2020/08/26 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
中国好声音广告词
2014/03/18 职场文书
小学庆六一活动总结
2014/08/28 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
党支部四风整改方案
2014/10/25 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
青年联谊会致辞
2015/07/31 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
Python之matplotlib绘制折线图
2022/04/13 Python