交通咨询系统设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档