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 相关文章推荐
配置支持SSI
Nov 25 PHP
关于时间计算的结总
Dec 06 PHP
PHP与SQL注入攻击[三]
Apr 17 PHP
PHP版国家代码、缩写查询函数代码
Aug 14 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
PHP微框架Dispatch简介
Jun 12 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
php利用gd库为图片添加水印
Nov 09 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
PHP基于回溯算法解决n皇后问题的方法示例
2017/11/07 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
Jquery为单选框checkbox绑定单击click事件
2012/12/18 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
jQuery实现的放大镜效果示例
2016/09/13 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
js实现内置计时器
2019/12/16 Javascript
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
Python中逗号的三种作用实例分析
2015/06/08 Python
Python多图片合并PDF的方法
2019/01/03 Python
Python获取好友地区分布及好友性别分布情况代码详解
2019/07/10 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
python help函数实例用法
2020/12/06 Python
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
求职简历的自我评价怎样写好
2013/10/07 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
励志演讲稿800字
2014/08/21 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
党员个人剖析材料
2014/09/30 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript