资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据结构课程设计说 明 书学 院: 信息科学与工程学院 班 级: 计算机11-3 完 成 人:姓 名: 徐海杰 学 号: 201101050323 姓 名: 薛德利 学 号: 201101050324 指导教师: 山 东 科 技 大 学2010年月日实验题目救护车调度模拟系统需求分析1.问题描述设计实现一个用事件驱动的“救护车调度”离散模型,模拟120急救中心响应每个病人的呼救信号统一调度救护车运行的情况。我们对问题作适当简化,假设:某城市共有m个可能的呼救点(居民小区、工厂、学校、公司、机关、单位等),分布着n所医院(包含在m个点中),有k辆救护车分派在各医院待命,出现呼救病人时,由急救中心统一指派救护车接送至最近的医院救治。救护车完成一次接送任务后即消毒,并回原处继续待命。假定呼救者与急救中心、急救中心与救护车之间的通讯畅通无阻,也不考虑道路交通堵塞的影响。可以用m个顶点的无向网来表示该城市的各地点和道路。时间可以分钟为单位,路段长可表示为救护车行驶化费的分钟数。2.要求模拟每一起病人呼救派车往救接人回院的过程:显示每辆救护车的状态(待命、往救、送院可能还有返点)和每个病人的状态(待派车、待接、送院途中),显示各医院的待命救护车队列,实时显示当前的病人平均接送时间和平均派车延迟时间以及已送达病人数。救护车应按最快的路线接送病人。呼救事件发生的间隔时间和地点都是随机的(其发生频度先给一个省缺值,可实时调整)。点数m、点名、路段数e和每段长度以及医院点的名称都由教师以文本文件形式给出,格式为:m n eABCDEFGH (m个点名称,大小写代表不同点)AEGHK (n个医院名称)AB11,AC15,EG9, FK24, (e条路段及长度)救护车总数及分派方案在运行前从键盘输入。3.提示可以设3种事件:病人呼救,救护车到病人家,救护车到医院。一个事件队列,一个呼救等待队列,n个救护车待命队列。初始化时设置第一个病人呼救事件插入事件队列,以启动系统运行。处理病人呼救事件时,将这个呼救排入呼救等待队列,同时产生下一个病人呼救事件。无向网可用邻接多重表。求出每个医院到其他各点的最短路径,每个点设一个由近到远的医院列表。参考教科书中第3章第5节:离散事件模拟。设计说明#include#include #include #include#include#include#define TRUE 1#define FALSE 0#define OK 1#define OVERFLOW_ -2#define INFINITY_ 9999#define MAX_VERTEX_NUM 52#define Status int#define VertexType int /定点类型/*定义结构体*/typedef struct /医院 char hospital_name; int hospital_Num; hospital_stc;hospital_stc hospitals10;typedef struct /呼救 int Num; int name; Call_stc;Call_stc call_vex52;typedef struct /呼救地点与医院距离矩阵 int distance; int Num; int name; Call_Hos_stc;Call_Hos_stc Hos_Call_matrix1052;Call_Hos_stc Call_Hos_matrix5210;typedef struct / 地点 char vex_name; int vex_Num; Node_stc;Node_stc vertices52;typedef struct /路段 char v1_name; char v2_name; int v1_Num; int v2_Num; int distance_v12; section_Node;section_Node sections90;typedef struct ArcCell /路径矩阵 int adj; int w; ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct VertexType vexsMAX_VERTEX_NUM; AdjMatrix arcs; int vexnum,arcnum; MGraph;MGraph G;typedef struct ambulance /救护车 int Num; int NowStatus; char termini_name; int wait_time; CHE;typedef struct QNode CHE che; struct QNode *next; QNode,*QueuePtr;typedef struct /救护车队列 QueuePtr front; QueuePtr rear; LinkQueue;LinkQueue AmbuQueue10;typedef struct event /事件 int AidNo; int CallTime; int DealTime; int EventType; char OccurName; int Occur_GNum; int interval; int Hos_Num; int Che_Num; struct event *next; EVENT;EVENT *EventList;EVENT *CallWaitList;/*定义变量*/int short_path_matrix9999; /最短路径矩阵int VexNum,HosNum,ArcNum,CheNum,Call_VexNum; / 地点数,医院数,路段数,救护车数,呼救地点数;int num20;int nearest_Hos99; / 最近医院int freqMOD=0,delayMOD=500;int AidEvent_Num=0;int EndTime=999; / 结束时间int CurrentTime; / 当前时间int ServicedNum; /已送达病人数int TotalDelayTime,TotalWaitTime,TotalDealTime,road_length; /总延迟,等待,处理事件,路段长度float DelayAverage,WaitAverage,DealAverage; /平均延迟,等待,处理/*定义函数*/void start();void ready();int GName_GNum(MGraph,char);void readfile(); /读文件函数void CreateGraph(MGraph *); / 创建矩阵void arrange_ambulances(); / 安排救护车void InitAmbu(); / 初始化救护车队列Status InitQueue(LinkQueue *); / 初始化Status EnQueue(LinkQueue *,CHE);/ 进队Status DeQueue(LinkQueue *); / 出队CHE GetAmbu(LinkQueue);Status IsEmptyQueue(LinkQueue); /判断队列是否为空Status Display_Queue(LinkQueue); / 显示队列EVENT * InsertEvent(EVENT *,EVENT); / 插入事件队列EVENT * DeleteEvent(EVENT *); / 删除事件EVENT GetEvent(EVENT *); / 获取事件void Event_Call(); / 事件函数void Event_ArriveHome();void Event_ArriveHos();void Display_WaitingAmbu(); / 显示函数void Display_Patient_Status(EVENT *,EVENT *);void Display_Ambulance_Status(EVENT *);void Display_All();int main() /主函数 system(cls); / 清屏 loop: printf(请输入结束时间( h999) printf(无效输入,请再次输入!n); goto loop; ready(); InitAmbu(); start();void ready() int l,k,i,j,not_hos,temp; int PMAX_VERTEX_NUMMAX_VERTEX_NUM,DMAX_VERTEX_NUM; system(cls); readfile(); /读文件 arrange_ambulances(); /安排救护车 CreateGraph(&G); /创
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号