博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蚂蚁爬杆
阅读量:7042 次
发布时间:2019-06-28

本文共 1211 字,大约阅读时间需要 4 分钟。

有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。

* 木杆很细,不能同时通过一只蚂蚁。开始 时,蚂蚁的头朝左还是朝右是任意的,它们只会朝前走或调头,
* 但不会后退。当任意两只蚂蚁碰头时,两只蚂蚁会同时调头朝反方向走。假设蚂蚁们每秒钟可以走一厘米的距离。
* 编写程序,求所有蚂蚁都离开木杆 的最小时间和最大时间。

分析:根据题意,初始状态就决定了最终的时间。所以只要遍历所有可能的初始状态就能找出最大最小时间。

每只蚂蚁的初始状态由方向、位置决定,这里位置固定了,所以只考虑可能的方向。只有两个可能的方向,所以初始
状态数为2^n(n蚂蚁的数量)
碰头的检查:这里每ms更新一次蚂蚁的状态,如果要求精度更高,可以更短的时间更新状态。每更新一次,做一次
检查,如果两只蚂蚁的位置相同,那么就发生碰头。

#define CNT 5 #define LENGTH 27 char min, max; float min_cost = INT_MAX, max_cost = INT_MIN; enum {
left=0, right }; float speed = 0.001; // ms struct State{
char dir; float pos; //杆长27cm }; int InitPos[5]={
3, 7, 11, 17, 23}; void InitState(struct State *s, char origState) {
for (int i=0; i
>i & 1); s[i].pos = InitPos[i]; } } //更新蚂蚁的位置 void UpdateState(struct State *s) {
for (int i=0; i
= LENGTH) continue; finish = 0; for (int j=i+1; j
max_cost) {
max_cost = t; max = origState; } if (t < min_cost) {
min_cost = t; min = origState; } break; } } origState++; } }

 

转载地址:http://nbhal.baihongyu.com/

你可能感兴趣的文章
jQuery学习(二)
查看>>
程序员的修养 -- 如何写日志(logging)
查看>>
[Splay]Luogu 3960 NOIP2017 列队
查看>>
网络流——最大流问题例题
查看>>
数据恢复:模拟2个逻辑坏块
查看>>
SDUT 1124-飞跃荒野(三维BFS)
查看>>
wcf 请考虑增加操作超时
查看>>
【设计模式】简单工厂模式
查看>>
[LeetCode] Binary Tree Paths 二叉树路径
查看>>
对JAVA集合进行遍历删除时务必要用迭代器
查看>>
poj 2010 Moo University - Financial Aid(优先队列(最小堆)+ 贪心 + 枚举)
查看>>
统计多少个汉字与字母
查看>>
Odoo9发行说明
查看>>
logging日志管理--将日志打印在屏幕上
查看>>
PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
查看>>
mongodb 3.x 之实用新功能窥看[2] ——使用$lookup做多表关联处理
查看>>
实际利率 > 名义利率
查看>>
第三篇:基于K-近邻分类算法的手写识别系统
查看>>
9.6智力题(一)——给定两条绳子,每条绳子燃烧殆尽正好用一个小时,用这两条绳子准确计时15分钟...
查看>>
启动redis
查看>>