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 相关文章推荐
Discuz! Passport 通行证整合
Mar 27 PHP
用PHP与XML联手进行网站编程代码实例
Jul 10 PHP
用PHP实现的四则运算表达式计算实现代码
Aug 02 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
探讨如何把session存入数据库
Jun 07 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 PHP
2017年最新PHP经典面试题目汇总(上篇)
Mar 17 PHP
PHP实现的简单AES加密解密算法实例
May 29 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 PHP
laravel 解决路由除了根目录其他都404的问题
Oct 18 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
PHP调用C#开发的dll类库方法
2014/07/28 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
2019/03/21 PHP
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
python 合并文件的具体实例
2013/08/08 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
js实现弹框效果
2021/03/24 Javascript
四群教育工作实施方案
2014/03/26 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
商铺门前三包责任书
2014/07/25 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
自主招生专家推荐信
2015/03/26 职场文书
2015年大学教师工作总结
2015/05/20 职场文书
怎样写观后感
2015/06/19 职场文书
学生会干部任命书
2015/09/21 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
MySQL 角色(role)功能介绍
2021/04/24 MySQL
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python