• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: C/C++
  • 标签: C++  

资源简介

元胞自动机的NS模型的C++代码实现 可用 结构清晰

资源截图

代码片段和文件信息

#include“iostream“
#include
#include
#include
#include 
using namespace std;
//#include
//#include“stdafx.h“

#define Lane 50//总共的格子数
#define TBEGIN  2000//开始计时的次数
#define  T   3000//总共更新的次数
#define Vmax 5//最大速度
#define P 0.5//减速概率

void gotoxy(int xint y);
void back();
void show(intint);
void clear(int);
void delay(int );
void delay1(int );
void initcars(int );
void move();
float caculate(int );
int FindFront(int int );
int cars[T][Lane]; //定义数组
//车辆是从左到右顺序更新的,可能和实际不太相符。可以使用多线程并行更新的方法,网上一些NS模型的实现是采用顺序更新的,所以我就
//先采用了顺序更新。 为了便于观察,我在车辆更新时用了延迟函数。

int main()
{
int i;
float v;
srand(time(NULL));

i=20;

    initcars(i);
    move();
    v=caculate(i);
return 0;
}

//初始化道路车辆
void initcars(int n)
{
int ijlocationspeed;

for(i=0;i for(j=0;j cars[i][j]=-1;

//赋初值
for(i=0;i {
location=rand()%Lane;

if( cars[0][location] ==-1)
{
cars[0][location]=rand()%(Vmax+1);
show(locationcars[0][location]);
back();
}
else   //如果该位置上已经youchel,再为其重新随机选择一个位置
i--;
}
delay(1);
//debug
/*for(j=0;j if( cars[0][j] >=0 )
printf(“%d %d\n“jcars[0][j]);*/
}

//车辆运动
void move()
{
int i=0jxvgap;

for(i=0;i {
for(j=0;j {
if( cars[i][j] >= 0 )
{
v=cars[i][j];
gap=FindFront(ij); //与前车距离
//printf(“weizhi: %d sudu:%d gap:%d\n“jcars[i][j]gap);
//速度更新
if( (v+1) <= Vmax)
v++;
if( v > gap )
v = gap;
if( v>0 && ( rand()%100 <= P*100 ) )
v--;

//位置更新
x=v+j;
x=x%Lane;
//printf(“\n%d %d\n“xv);
if( cars[i+1][x] == -1 )
{
cars[i+1][x]=v;
clear(j);
back();
show(xv);
back();
}
else
{
printf(“撞车啦第%d秒,第%d格\n“ij);
exit(1);
}
delay1(1);//延迟显示

}

}
delay(1);//延迟显示
}
}

//计算与前车距离 空格的个数
int FindFront(int iint j)
{
int front=0;
while( cars[i][(++j

评论

共有 条评论