交通咨询系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交通咨询系统设计实验目的和要求掌握最短路径的算法;1. 编写
实验报告;2.实验内容能让旅客咨询从任一个城市顶点到另一个城市顶点之间本设计要求一个交通咨询系统,可输入城市间的路程、所的最短路径、最低花费或最少时间等问题。对于不同的咨询要求,需时间或所需费用。实验步骤问题分析1、
该设计分为三个部分:
建立交通网络图的存储结构?
解决单源最短路径问题?
实现两个城市顶点之间的最短路径问题?
问题求解、2 2.1建立交通网络图的存储结构?图的邻接矩阵#define MVNum 50
Typedef struct{
vexs[MVNum];//顶点信息VertexType
邻接矩阵边的信息arcs[MVNum][MVNum];// Adjmatrix
}MGraph
单源最短路径2.2?算法Dijkstra 按路径长度递增产生诸顶点的最短路径2.3任意两个顶点之间的最短路径?
Floyd算法完整的程序清单3、
程序运行测试、4
#include stdafx.h
#include
#include
#define MVNum 50
#define Dij_MAXN 33
#define MAX_VERTEX_NUM 31
#define MAX_STRING_NUM 10
#define MAX_TRAFFIC_NUM 10
typedef struct TrafficNode
{
1 / 8
char name[MAX_STRING_NUM];
int Time;//
int EndCity //火车到达城市的编号
int Cost;//票价
} TrafficNodeDat;
typedef struct VNode
{
CityType city; //城市编号
int TrainNum; //标记下面Train数组里元素个数
TrafficNodeDat Train[MAX_TRAFFIC_NUM]; //数组成员为结构体,记录了到达城市、起止时间、票价和班次
} VNodeDat;
typedef struct TrafficNode
{
char name[MAX_STRING_NUM]; //班次
int Time;
int EndCity; //火车到达城市的编号
int Cost; //票价
} TrafficNodeDat;
typedef struct VNode
{
CityType city; //城市编号
int FlightNum; //标记下面Train数组和Flight数组里元素个数
TrafficNodeDat Flight[MAX_TRAFFIC_NUM];
} VNodeDat;
int main()
switch(Command)
{
case 0:
return 0;
case 1:
Administrators();//管理员操作界面函数
break;
case 2:
User();//用户操作界面函数
break;
default:
cout<<\ 选择序号错误!请重新选择!\n;
int InitSystem()
void User()
void Administrators()
int DelCity(char *Name) //删除城市
{
//删除城市
2 / 8
int city,i,j;
city=SeekCity(Name);
for(i=city;i { strcpy(CityName[i],CityName[i+1]); AdjList[i].FlightNum=AdjList[i+1].FlightNum;AdjList[i].TrainNum=AdjList[i+1].TrainN um; for(j=0;j { AdjList[i].Flight[j].Cost=AdjList[i+1].Flight[j].Cost; AdjList[i].Flight[j].EndCity=AdjList[i+1].Flight[j].EndCity; strcpy(AdjList[i].Flight[j].name,AdjList[i+1].Flight[j].name); AdjList[i].Flight[j].Time=AdjList[i+1].Flight[j].Time; } } CityNum--; return 1; } int DelPath(char *name) //删除路线 { //删除路线 int i,j,flag=0; for(i=0;i { for(j=0;j if(strcmp(AdjList[i].Flight[j].name,name)==0) {flag=1;break;}//找到要删除的路线,找到跳出for循环 if(flag) { for(;j { AdjList[i].Flight[j].Cost=AdjList[i].Flight[j+1].Cost; AdjList[i].Flight[j].EndCity=AdjList[i].Flight[j+1].EndCity; strcpy(AdjList[i].Flight[j].name,AdjList[i].Flight[j+1].name); AdjList[i].Flight[j].Time=AdjList[i].Flight[j+1].Time; } AdjList[i].FlightNum--;//将要删除路线后面的路线全部向前移,并将总数减1 break; } for(j=0;j 3 / 8 if(strcmp(AdjList[i].Train[j].name,name)==0) { flag=1; break; } if(flag) { for(;j {