• 大小: 40KB
    文件类型: .tar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-17
  • 语言: 其他
  • 标签: 算法竞赛  

资源简介

一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒。当两只蚂蚁相撞时,二者同时掉头(掉头时间忽略不计)。给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置。 程序给出了仿真结果,最后的图像显示需要opencv.

资源截图

代码片段和文件信息

#include “GodAntClass.h“
/// Ant function 
int Ant::move_one_step()
{
const int temp_val = stick_len ;
switch (cur_loc)
{
case 0:
{
if (cur_direction == false){ pre_direction  = true;  pre_loc = cur_loc + 1; }
else {pre_loc = cur_loc + 1;}
break;
}
case 10:
{
if (cur_direction == true){ pre_direction  = false;  pre_loc = cur_loc -1 ; }
else {pre_loc = cur_loc -1 ;}
break;
}
default:
{
if (cur_loc < 0 || cur_loc > stick_len){cout <<“ERROR IN MOVE!“< if (cur_direction == false ){pre_direction = cur_direction ; pre_loc = cur_loc -1;}
else {pre_direction = cur_direction ; pre_loc = cur_loc  + 1 ;}
break;
}
}
return 1;
}
int Ant::get_stick_loc()
{
if(cur_loc == pre_loc){cout <<“ERROR IN get_stick_loc()“< return cur_loc}

int Ant::show_info()
{
cout <<“\t“<<“name:“< <<“\t“<<“loc:“< <<“\t“<<“dir:“< < return 1;
}
/// God Fcuntion 

int God::init(std::vector & vec_init_state)
{
if (vec_init_state.size() != number_ant){cout <<“ERROR IN init()!“< vec_ant.clear();
for (int i = 0 ; i < number_ant;i++)
{
class Ant temp_ant(vec_init_state[i].nameGod::stick_lenvec_init_state[i].locvec_init_state[i].dir);
vec_ant.push_back(temp_ant);
}
if(vec_ant.size() != number_ant ){cout <<“ERROR IN init()“< return 1;
}
int God::move_step()
{
for (int i = 0 ; i < number_ant;i++)
if (!God::vec_ant[i].move_one_step())
{ cout <<“ERROR IN move_step()“< return 1;
}
int God::update_pre()
{
std::vector vec_ant_index(God::stick_len-1);
/// check overlap line
for (int i = 0 ; i < number_ant; i++)
{
int temp_stick_loc = God::vec_ant[i].get_stick_loc();
int temp_index = vec_ant_index[temp_stick_loc];
if (temp_index == -2 ){cout <<“ERROR IN update_pre() “< if (temp_index == -1 )
vec_ant_index[temp_stick_loc] = i;
else
{
God::update_pre_overlap(temp_indexi);
vec_ant_index[temp_stick_loc] = -2 ;
}
}
/// check overlap point
vec_ant_index.clear();
for (int i = 0 ; i <= stick_len;i++)
vec_ant_index.push_back(-1);
for (int i = 0 ; i < number_ant; i++)
{
int temp_pre = God::vec_ant[i].pre_loc;
int temp_index = vec_ant_index[temp_pre];
if (temp_index == -2 ){cout <<“ERROR IN update_pre() “< if (temp_index == -1) vec_ant_index[temp_pre] = i;
else
{
if (vec_ant[i].pre_direction == vec_ant[temp_index].pre_direction)
{cout<<“ERROR IN update_pre_point“< vec_ant[i].pre_direction = !vec_ant[i].pre_direction;
vec_ant[temp_index].pre_direction  = !vec_ant[temp_index].pre_direction;
vec_ant_index[temp_pre] = -2 ;
}
}

/// update cur;
for (int i = 0 ; i < number_ant ; i++)
{
vec_ant[i].cur_loc = vec_ant[i].pre_loc;
vec_ant[i].cur_direction = vec_ant[i].pre_direction;
}
}

int God::update_

评论

共有 条评论