资源简介
元胞自动机模型源代码,模拟紧急事件下人员疏散问题
代码片段和文件信息
#include “stdafx.h“
#include “iVPS.h“
#include “math.h“
#include “time.h“
#include “iostream.h“
int Np=50; //初始化人数
int timestep=0;
LNode *s;
int count=0;
fstream vfile;//open file to save density data;
fstream ffile;// open file to save flow rate data;
fstream cfile; //open file to save the count of each type of pedestrians;
//=================链表操作================================
bool ListInsert(LNode *sint iint xint y)
{
int peoplenum=s->per.index;
LNode *p_temp=s;
while(p_temp->next!=NULL)//error
{
p_temp=p_temp->next;
}
LNode *news;
if((news=(LNode*)malloc(sizeof(LNode)))!=NULL)
{
p_temp->next=news;
news->next=NULL;
news->per.index=i;
news->per.location.x=x;
news->per.location.y=y;
news->per.s=0;
s->per.index=i;
return true;
}
else
return false;
}
struct LNode *ListFind(LNode *s int index)
{
LNode *p_temp=s;
while(p_temp->next!=NULL)
{
if(p_temp->next->per.index==index)
return p_temp->next;
else
p_temp=p_temp->next;
}
return p_temp;
}
struct LNode * Listdelete(LNode *sint xint y)
{
int pernum=s->per.index;
LNode *p_temp=s->next ;
LNode *p_pre=s;//p_temp
while(p_temp->per.location.x != x || p_temp->per.location.y!=y)
{
p_pre=p_temp;
p_temp=p_temp->next;
}
p_pre->next =p_temp->next;
p_temp->next=NULL;
free(p_temp);
p_temp=NULL;
s->per.index=pernum-1;
return p_pre;
}
bool randomseq(LNode *s)
{
LNode *p_temp=s;
while(p_temp->next!=NULL)//error
{
int rand1=(int)(rand()/(double)RAND_MAX)*(Np-1);
struct LNode *p;
LNode temp;
p=ListFind(srand1);
p_temp->next->per.s=0;//清空方向记录;
p->per.s=0;
temp.per.index=p_temp->next->per.index;
temp.per.location.x=p_temp->next->per.location.x;
temp.per.location.y=p_temp->next->per.location.y;
p_temp->next->per.index=p->per.index;
p_temp->next->per.location.x=p->per.location.x;
p_temp->next->per.location.y=p->per.location.y;
p->per.index=temp.per.index;
p->per.location.x=temp.per.location.x;
p->per.location.y=temp.per.location.y;
p_temp=p_temp->next;
}
return true;
}
//==============================================================
bool initparam()
{//20
int ij;
//========初始化通道==============
for( i=0;i {//3
if(i==0||i==RoomWidth-1)
{//1
for (j=0;j Ch[i][j]=-1;
Ch[RoomWidth-1][RoomLength/2]=0;
Ch[RoomWidth-1][RoomLength/2-1]=0;
Ch[RoomWidth-1][RoomLength/2+1]=0;
Ch[RoomWidth-1][RoomLength/2+2]=0;
}//1
else
{//2
for(j=0;j if(j==0||j==RoomLength-1)
{
Ch[i][j]=-1;
}
else
Ch[i][j]=0;
}//2
}//3
//========初始化人群==============
if((s = (LNode*) malloc (sizeof(LNode)))!=NULL)
{//6
s->per.index=0;
s->next=NULL;
}//6
for( i=1;i<=Np;i++)
{//8
int xy;
do
{
double rand1=(rand()/(double)RAND_MAX);
double rand2=(rand
- 上一篇:CRC32校验程序源代码( C++)
- 下一篇:雅克比迭代法 c语言实现计算方法
评论
共有 条评论