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
使用 MySQL Date/Time 类型
Mar 26 PHP
php cli 方式 在crotab中运行解决
Feb 08 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
PHP闭包实例解析
Sep 08 PHP
php无限极分类递归排序实现方法
Nov 11 PHP
ThinkPHP3.2.3数据库设置新特性
Mar 05 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 PHP
php中使用gd库实现下载网页中所有图片
May 12 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
PHP SESSION机制的理解与实例
Mar 22 PHP
Yii框架的redis命令使用方法简单示例
Oct 15 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 Ajax中文乱码问题解决方法
2009/02/27 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
Jquery 绑定时间实现代码
2011/05/03 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
js canvas实现适用于移动端的百分比仪表盘dashboard
2017/07/18 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
解读ES6中class关键字
2017/11/20 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
js实现计算器功能
2020/08/10 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
python中from module import * 的一个坑
2014/07/20 Python
跟老齐学Python之重回函数
2014/10/10 Python
Python判断直线和矩形是否相交的方法
2015/07/14 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
瑞士国际航空官网:SWISS
2016/07/21 全球购物
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
电气工程和自动化自荐信范文
2013/12/25 职场文书
组织鉴定材料
2014/06/02 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
初中教师个人工作总结
2015/02/10 职场文书
工程质量保证书
2015/05/09 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android
Golang 结构体数据集合
2022/04/22 Golang