⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ant.cpp

📁 这是一个关于蚂蚁算法的源代码程序文件
💻 CPP
字号:
#include<iostream>
using namespace std;
//常量设置
const int APOS=0;         //A点位置
const int BPOS=30;        //B点位置
const int MAXANT=5;       //最大蚂蚁数
const int SPEED=1;        //速度
//全局变量
//初始位置已知量(必须是奇数)
int poslist[MAXANT]={3,7,11,17,23};
//用5位二进制数表示5只蚂蚁的开始方向 00000~11111,共32种
enum ANTFLAG{
ANTFLAG1 =   0x1,
ANTFLAG2 =   0x2,
ANTFLAG3 =   0x4,
ANTFLAG4 =   0x8,
ANTFLAG5 =   0x10
   //ANTFLAG6 =   0X20      //假如有更多只
   //...
};
int antflist[]={ANTFLAG1,ANTFLAG2,ANTFLAG3,ANTFLAG4,ANTFLAG5};
//根据二进制数求蚂蚁的开始方向
int StartDir(int val1,int val2){
int ir=(antflist[val1]&val2) ? 1:-1;
return ir;
} 
class Ant;
//蚂蚁类
class Ant{
private:
int   m_id;                           //蚂蚁id编号(0~4)
bool m_life;                        //生命状态,初始为1,离开杆后为0
int   m_pos;                          //木杆上坐标(0~27)
int   m_dir;                          //方向(1,-1)
int   m_speed;                       //速度(1)
int   m_time;                        //爬行时间(0~?)
public:
static int count;                  //现有蚁数
static int antlist[MAXANT];        //存储每个蚂蚁的位置
public:
Ant();
void Init();                                          //蚂蚁初始化
int   GetId(){return m_id;}                            //获得ID编号
int   GetTime(){return m_time;}                        //返回时间
void SetDir(int val){ m_dir=StartDir(m_id,val);}      //初始方向
void CheckLife();                                     //检测生命状态
void ChangeDir();                                     //相遇改变方向
void RunPos();                                        //每秒后的位置
void Print(){cout<<"id: "<<m_id<<" pos: "<<m_pos
<<" dir: "<< m_dir<<" time:" <<m_time<<endl;}
};//end ANT
Ant::Ant(){ m_id=count;Init();count++;}
void Ant::Init(){
     m_pos=poslist[m_id];
m_speed=SPEED;
m_life=1;
m_time=0;
}
void Ant::CheckLife (){
if(m_life){
if(m_pos<APOS || m_pos>BPOS)
{
m_life=0;
count--;
}
else
m_time++;    
}
}
void Ant::ChangeDir(){if(m_life){m_dir*=-1;}}
void Ant::RunPos(){
if(m_life)
    m_pos+=m_dir*m_speed;
    antlist[m_id]=m_pos;
}
//一个作用蚂蚁类的类
class FunAnt{
public:
int lasttime;                            //最后一只蚂蚁离开的时间
Ant ants[MAXANT];                       //蚂蚁对象数组共5只
public:
FunAnt(){}
     //设置蚂蚁初始方向
void Funsetdir(int d){
   for(int i=0; i<MAXANT;i++)
   ants[i].SetDir(d);
}
//屏幕输出所有蚂蚁信息
void print(){
for(int i=0;i<MAXANT;i++)
ants[i].Print();
}
//一直到最后一只蚂蚁离开木杆,输出每只蚂蚁所用时间
void Run()
{   
while(ants[0].count){
    for(int i=0;i<MAXANT;i++)
    { 
    ants[i].RunPos();                    //移动蚂蚁位置
                ants[i].CheckLife();       //检测蚂蚁是否在杆上
    }
    ChangeDir();                         //检测,如果蚂蚁相遇改变方向
}
lasttime=ants[0].GetTime();
         for(int i=1; i<MAXANT;i++)
{  
bool b=lasttime<ants[i].GetTime();
if(b){lasttime=ants[i].GetTime();}
}
print();
}
//检测相邻蚂蚁位置函数,如果位置相同就调用改变方向函数
void ChangeDir(){
for(int i=0;i<MAXANT-1;i++)
{
if(ants[0].antlist[i]==ants[0].antlist[i+1])
{
ants[i].ChangeDir();
ants[i+1].ChangeDir();
}
}
}
};
int Ant::antlist[]={3,7,11,17,23};
int Ant::count=0;
//////////////////////////////////////////
int main(){
int   maxlist[32];                       //存储32次的结果数组
for(int i=0;i<32;i++){
Ant::count =0;   
FunAnt a1;  
     a1.Funsetdir(i);
a1.Run();
maxlist[i]=a1.lasttime;
cout<<"lasttime:"<<a1.lasttime<<endl;
}
int min,max;
min=max=maxlist[0];
for(int i=0;i<32 ;i++)
{
if(max<maxlist[i])
max=maxlist[i];
if(min>maxlist[i])
min=maxlist[i];
}
cout<<"max:"<<max<<endl
<<"min:"<<min<<endl;
return 0;
}//end main 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -