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
PHP函数utf8转gb2312编码
Dec 21 PHP
PHP文件上传实例详解!!!
Jan 02 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
php的list()的一步操作给一组变量进行赋值的使用
May 18 PHP
谨慎使用PHP的引用原因分析
Sep 06 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
thinkphp模板输出技巧汇总
Nov 24 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 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下载excel无法打开的解决方法
2013/12/24 PHP
重新认识php array_merge函数
2014/08/31 PHP
smarty内置函数config_load用法实例
2015/01/22 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
Javascript remove 自定义数组删除方法
2009/10/20 Javascript
javascript:json数据的页面绑定示例代码
2014/01/26 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
Jquery中attr与prop的区别详解
2017/05/27 jQuery
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
简明 Python 基础学习教程
2007/02/08 Python
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
python与pycharm有何区别
2020/07/01 Python
Django封装交互接口代码
2020/07/12 Python
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
党风廉政建设责任书
2014/04/14 职场文书
大学生求职简历自我评价
2015/03/02 职场文书
《悬崖边的树》读后感2篇
2019/12/02 职场文书
MySQL8.0.18配置多主一从
2021/06/21 MySQL
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL