}LinkQueue;
typedef struct TimeNode {int adjvex; int route; int begintime[2]; int arrivetime[2];
struct TimeNode *child[MAX_ROUTE_NUM]; }TimeNode,*TimeTree; struct arc {int co; char vt[10]; char vh[10]; int bt[2]; int at[2]; float mo;
}a[MAX_ARC_SIZE];
基本操作:
void Administer(ALGraph *G); void cityedit(ALGraph *G);
void CopyTimeTree(TimeTree p,TimeTree q); void createcityfile();//创建城市文件 void CreateGraph(ALGraph *G);//创建图 void createplanefile();//创建飞机航班文件
word文档 可自由复制编辑
void CreateTimeTree(TimeTree p,int i,int j,LinkQueue *Q,infolist (*arcs)[MAX_VERTEX_NUM]); void createtrainfile();//创建列车文件 void DeleteQueue(LinkQueue *Q,int *x);
void DemandDispose(int n,ALGraph G);//用户需要的方案 void DestoryTimeTree(TimeTree p); void EnterplaneArc(ALGraph *G);?//增加航班 void EnterQueue(LinkQueue *Q,int x);//入队Q void EntertrainArc(ALGraph *G);//增加列次 void EnterVertex(ALGraph *G);
voidExpenditureDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,float *M,int *final);//最少花费安排 void flightedit(ALGraph *G);//编辑航班
void initgraph(ALGraph *G);//创建图的方式:通过键盘或者文档 void InitQueue(LinkQueue *Q);//创建队列Q int IsEmpty(LinkQueue *Q);
int LocateVertex(ALGraph *G,char *v);//找到v在图中的位置
void MinExpenditure(infolist arcs,float *expenditure,int *route);//计算金
钱
void MinTime(infolist arcs,int *time,int *route);//计算时间 int save(ALGraph *G);//保存图
voidTimeDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,int (*T)[2],int *final);//最少时间安排
word文档 可自由复制编辑
voidTimeTreeDispose(Node*head,infolist(*arcs)[MAX_VERTEX_NUM]);
void trainedit(ALGraph *G);//编辑列车
voidTransferDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1);//最少换乘安排
void UserDemand(ALGraph G);//用户需要的选择 void VisitTimeTree(TimeTree p);
2.2 程序模块
2.2.1 管理员模块
管理员模块包括初始化交通系统、城市编辑模块、飞机航班编辑模块、列车车次编辑模块。初始化交通系统包括键盘和文档两种创建方式。键盘创建包括创建城市文件、创建航班文件、创建列次文件。
2.2.2 客户查询
用户咨询界面包括用户需要的最少金钱花费、最少时间花费和最少转乘次数。没种方案都可以选择用户需要的起始地和目的地,可以根据用户需要选择乘坐的飞机或者列车。
2.3各模块之间的调用关系以及算法设计
2.3.1各个模块之间的调用关系
主函数 word文档 可自由复制编辑
键盘 文档 最少旅行费用 最少旅行时间 初始化交通系统 最少中转次数 返回上一级菜单 初始化交通系统 城市编辑 飞机航班编辑 列车车次编辑 返回上一级菜单 管理员管理 用户咨询 管理员管理 退出 用户咨询
城市编辑 飞机航班编辑 火车列次编辑 图1
新增城市 新增航班 新增车次 3 详细设计
3.1 管理员模块
初始化交通系统通过键盘和文档两种方式实现,使用了函数是
word文档 可自由复制编辑
initgraph(ALGraph *G)函数。调用了创建城市文件createcityfile()函数、创建火车车次文件createtainfile()函数和创建图的CreateGraph(G)函数。
城市编辑模块使用函数cityedit(ALGraph*G)调用了添加城市函数EnterVertex(ALGraph*G)实现对城市的添加功能。
飞机航班编辑模块使用函数flightedit(ALGraph *G)调用En TerplaneArc(ALGraph*G)函数实现增加航班功能。
列车车次编辑模块使用函数traintedit(ALGraph *G)调用EnTertrainArc(ALGraph*G)函数实现增加航班功能。
3.2 用户查询模块
用户需求使用函数UserDemand(ALGraph *G)调用需求方案函数DemandDispose(int n,ALGraph G),需求方案函数中调用了花费方案函数 voidExpenditureDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,float *M,int *final)、最少时间方案函数voidTimeDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,int (*T)[2],int *final)和最少换乘函数voidTransferDispose(intk,infolist(*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1)实现,而最少花费函数又调用了计算金钱的MinExpenditure(infolist arcs,float *expenditure,int *route)函数;最少时间函数调用了计算时间函数MinTime(infolist arcs,int *time,int *route);最少转乘函数使用了队列和图的广度优先遍历。在计算最小时间时用到了时间树。
用户可以在选择了三种方案任一种之后选择起始城市和目的城市,然后选择想要乘坐的是飞机还是火车,就可以找出三种不同方案的各自的最优方案。
3.3 函数调用关系图
word文档 可自由复制编辑