交通咨询系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交通咨询系统设计
实验目的和要求
1.掌握最短路径的算法;
2.编写实验报告;
实验内容
本设计要求一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一个城市顶点之间的最短路径、最低花费或最少时间等问题。对于不同的咨询要求,可输入城市间的路程、所需时间或所需费用。
实验步骤
1、问题分析
该设计分为三个部分:
●建立交通网络图的存储结构
●解决单源最短路径问题
●实现两个城市顶点之间的最短路径问题
2、问题求解
● 2.1建立交通网络图的存储结构
图的邻接矩阵
#define MVNum 50
Typedef struct{
VertexType vexs[MVNum];//顶点信息
Adjmatrix arcs[MVNum][MVNum];//邻接矩阵边的信息
}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
{
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<<"\t选择序号错误!请重新选择!\n";
int InitSystem()
void User()
void Administrators()
int DelCity(char *Name) //删除城市
{
//删除城市
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 ].TrainNum; 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