数据结构课程设计交通咨询系统设计

数据结构课程设计交通咨询系统设计
数据结构课程设计交通咨询系统设计

信息科学与工程学院课程设计任务书

题目:交通咨询系统设计

学号: 201112220141

姓名:

年级:

专业:计算机应用与技术

课程:数据结构

指导教师:职称:

完成时间:

课程设计任务书及成绩评定

一、需求分析

设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的最短路径(里程)或最低花费或最少时间等问题。对于不同的咨询要求,可输入城市间的路程或所需时间或所需费用。

本设计共分三部分,一是建立交通网络图的存储结构;二是解决单源最短路径问题;三是实现任两个城市顶点之间的最短路径问题。

1.1.1建立图的存储结构

邻接矩阵是表示图形中顶点之间相邻关系的矩阵。图的邻接矩阵是定义如下的n 阶方阵:

设G=(V ,E )是一个图,结点集为

{}

n v v v V ,,,21 =。

G 的邻接矩阵,E

,,0E

,,)(,)(????

?>?<∞>∈<==??j i j i j i j i n n j i ij n n ij v v v v v v v v w a a A )或当(,或)或当(, 当邻接矩阵的行表头、列表头顺序一定时,一个图的邻接矩阵表示是唯一的。

图的邻接矩阵表示,除了需用一个二维数组存储顶点之间的相邻关系的邻接矩阵外,通常还需要使用一个具有n 个元素的一维数组来存储顶点信息,其中下标为i 的元素存储顶点i 的信息。因此,图的邻接矩阵的存储结构定义如下:

1.1.2 单源最短路径

最短路径的提法很多。在这里先讨论单源最短路径问题:即已知有向图(带权),我们希望找出从某个源点S ∈V 到G 中其余各顶点的最短路径。

为了叙述方便,我们把路径上的开始点称为源点,路径的最后一个顶点为终点。那么,如何求得给定有向图的单源最短路径呢?迪杰斯特拉(Dijkstra )提出按路径长度递增产生诸点的最短路径算法,称之为迪杰斯特拉算法。

迪杰斯特拉算法求最短路径的实现思想是:设G=(V ,E )是一个有向图,

结点集为,}v ,,v ,{v V n 21?=,cost 是表示G 的邻接矩阵,cost[i][j]表示有向边的权。若不存在有向边,则cost[i][j]的权为无穷大(这里取值为32767)。设S 是一个集合,其中的每个元素表示一个顶点,从源点到这些顶点的最短距离已经求出。设顶点v 1为源点,集合S 的初态只包含一个元素,即顶点v 1。数组dist 记录从源点到其他顶点当前的最短距离,其初值为dist[i]=cost[v 1][i],i=1,2,……,n 。从S 之外的顶点集合V-S 中选出一个顶点w ,使dist[w]的值最小。于是从源点到达w 只通过S 中顶点,把w 加入集合S 中,调整dist 中记录的从源点到V-S 中每个顶点v 的距离:从原来的dist[v]和dist[w]+cost[w][v]中选择较小的值作为新的dist[v]。重复上述过程,直到V-S 为空。

最终结果是:S 记录了从源点到该顶点存在最短路径的顶点集合,数组dist 记录了源点到V 中其余各顶点之间的最短路径,path 是最短路径的路径数组,其中path[i]表示从源点到顶点i 之间的最短路径的前驱顶点。

因此,迪杰斯特拉算法可用自然语言描述如下:

1.1.3 任意一对顶点间最短路径

任意一对顶点间最短路径问题,是对于给定的有向网络图G=(V ,E ),要对G 中任意一对顶点有序对“v,w(v ≠w)”,找出v 到w 的最短路径。

要解决这个问题,我们可以依次把有向网络图中每个顶点作为源点,重复执行前面讨论的迪杰斯特拉算法n 次,即可以求得每对顶点之间的最短路径。

这里还可以用另外一种方法,称作费洛伊德(Floyd )算法。

费洛伊德(Floyd )算法算法的基本思想是:假设求从顶点 v i 到v j 的最短路

径。如果从v

i 到v

j

存在一条长度为arcs[i][j]的路径,该路径不一定是最短路

径,还需要进行n次试探。首先考虑路径

i ,v

1

>和

1

,v

j

>是否存在。如果存在,

则比较

i ,v

j

>和< v

i

,v

1

,v

j

>的路径长度,取长度较短者为当前所求得的最短路

径。该路径是中间顶点序号不大于1的最短路径。其次,考虑从v

i 到v

j

是否包

含有顶点v

2为中间顶点的路径

i

,…,v

2

,…,v

j

>,若没有,则说明从v

i

到v

j

的当

前最短路径就是前一步求出的;若有,那么

i ,…,v

2

,…,v

j

>可分解为

i

, (v)

2

>

2,…,v

j

>,而这两条路径是前一次找到的中间顶点序号不大于1的最短路径,

将这两条路径长度相加就得到路径

i ,…,v

2

,…,v

j

>的长度。将该长度与前一次

中求出的从v

i 到v

j

的中间顶点序号不大于1的最短路径比较,取其长度较短者

作为当前求得的从v

i 到v

j

的中间顶点序号不大于2的最短路径。依此类推,直

到顶点v

n 加入当前从v

i

到v

j

的最短路径后,选出从v

i

到v

j

的中间顶点序号不大

于n的最短路径为止。由于图G中顶点序号不大于n,所以v

i 到v

j

的中间顶点序

号不大于n的最短路径,已考虑了所有顶点作为中间顶点的可能性,因此,它就

是v

i 到v

j

的最短路径。

1.2 程序流程图

二、详细设计

2.1 建立有向图的存储结构

void CreateMGraph(MGraph * G,int n,int e) {

int i,j,k,w;

for(i=1;i<=n;i++)

G->vexs[i]=(char)i;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

G->arcs[i][j]=Maxint;

printf("输入%d条边的i,j及w:\n",e);

for(k=1;k<=e;k++)

{

scanf("%d,%d,%d",&i,&j,&w);

G->arcs[i][j]=w;

}

printf("有向图建立完毕\n");

}

2.2迪杰斯特拉算法

void Dijkstra(MGraph *G,int v1,int n) {

int D2[MVNum],P2[MVNum];

int v,i,w,min;

enum boolean S[MVNum];

for(v=1;v<=n;v++)

{

S[v]=FALSE;

D2[v]=G->arcs[v1][v];

if(D2[v]

P2[v]=v1;

else

P2[v]=0;

}

D2[v1]=0;S[v1]=TRUE;

for(i=2;i

{

min=Maxint;

for(w=1;w<=n;w++)

if(!S[w]&&D2[w]

{

v=w;min=D2[w];

}

S[v]=TRUE;

for(w=1;w<=n;w++)

if(!S[w]&&(D2[v]+G->arcs[v][w]

D2[w]=D2[v]+G->arcs[v][w];

P2[w]=v;

}

}

printf("路径长度路径\n");

for(i=1;i<=n;i++)

{

printf("%5d",D2[i]);

printf("%5d",i);v=P2[i];

while(v!=0)

{

printf("<-%d",v);

v=P2[v];

}

printf("\n");

}

}

2.3 费洛伊德算法

void Floyd(MGraph *G,int n)

{ int i,j,k,v,w;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

{ if(G->arcs[i][j]!=Maxint)

P[i][j]=j;

else

P[i][j]=0;

D[i][j]=G->arcs[i][j];

}

for(k=1;k<=n;k++)

{

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

{

if(D[i][k]+D[k][j]

{

D[i][j]=D[i][k]+D[k][j];

P[i][j]=P[i][k];;

}

}

}

}

2.4 运行主控程序

void main()

{ MGraph *G;

int m,n,e,v,w,k;

int xz=1;

G=(MGraph *)malloc(sizeof(MGraph));

printf("输入图中顶点个数和边数n,e:");

scanf("%d,%d",&n,&e);

CreateMGraph(G,n,e);

while (xz!=0)

{ printf("******求城市间的最短路径******\n");

printf("1.求一个城市到所有城市的最短路径\n");

printf(“2.求任意的两个城市之间的最短路径\n");

printf(" 请选择:1 或 2,选择 0 退出:");

scanf("%d",&xz);

if(xz==2)

{

Floyd(G,n);

printf("输入起点和终点:v,w:");

scanf("%d,%d",&v,&w);

k=P[v][w];

if(k==0)

printf("顶点 %d 到 %d 无路径!\n",v,w);

else

{ printf("从顶点%d到%d的最短路径是::%d",v,w,v);

while(k!=w)

{

printf("→¨2%d",k);

k=P[k][w];

}

printf("→¨2%d",w);

printf("路径长度:%d\n",D[v][w]);

}

}

else if(xz==1)

{

printf("求单源路径,输入源点 v :");

scanf("%d",&v);

Dijkstra(G,v,n);

}

}

printf("结束求最短路径");

}

三、调试分析

编译: 在第一次编译时出现了很多错误,是因为我对C语言的不熟练,比如调用费洛伊德算法时出现了调用的错误,找了好久,才改正过来,还有就是for 语句的运用,由于本次程序要用很多for循环,我把一次for循环放到了上面for循环中,导致程序不能正确输出结果。最后把调到外面才OK。

四、测试结果

交通咨询系统通过迪杰斯特拉算法得出每一个城市到所有城市的最短路径,然后通过费洛伊德算法得出任意两个城市间最短路径。

本程序的运行环境为DOS操作系统,执行文件为交通咨询.exe。

进入程序后,即显示文本的操作界面:

输入定点数和边数后,依次输入有向边,以及两点间的距离,用逗号间隔开,回车换行,当有向图输入完全时,进入菜单

选择你要进行的模式,求一个城市到所有城市的最短路径输入1,回车进入该模式,输入你所要求的城市代表的顶点数,回车确认。

求任意的两个城市之间的最短路径输入2,回车确认进入该模式,输入两座城市代表的顶点数,以逗号间隔开,回车确认。

运行结果:下面是城市交通图

上海

五、附录

#include

#include

#define MVNum 100 //最大顶点数

#define Maxint 35000

enum boolean{FALSE,TRUE};

typedef char Vertextype;

typedef int Adjmatrix;

typedef struct

{

Vertextype vexs[MVNum]; //顶点数组,类型假定为char型Adjmatrix arcs[MVNum] [MVNum]; // 邻接矩阵,假定为int型} MGraph;

int D1[MVNum], p1[MVNum];

int D[MVNum][MVNum],p[MVNum][MVNum];

//文件名save.c

void CreateMGraph(MGraph *G,int n,int e)

{ //采用邻接矩阵表示法构造有向图G,n,e表示图的当前顶点数和边数 int i,j,k,w;

for(i=1;i<=n;i++) //输入顶点信息

G->vexs[i]=(char)i;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

G->arcs[i][j]=Maxint; // 初始化邻接矩阵

printf ("输入%d条边的i,j及w: \n",e);

for(k=1;k<=e;k++)

{ //读入e条边,建立邻接矩阵

scanf("%d,%d,%d",&i,&j,&w);

G->arcs[i][j]=w;

}

printf ("有向图的存储结构建立完毕! \n");

}

//文件名:dijkstra.c(迪杰斯特拉算法)

void Dijkstra(MGraph *G, int v1,int n)

{ //用Dijkstra算法求有向图G的v1顶点到其他顶点v的最短路径p[v]及其权D[v]

//设G是有向图的邻接矩阵,若边不存在,则G[i][j]=Maxint //S[v]为真当且仅当v属于S,及以求的从v1到v的最短路径

int D2[MVNum], p2[MVNum];

int v,i,w,min;

enum boolean S[MVNum];

for(v=1;v<=n;v++)

{ // 初始化S和D

S[v]=FALSE; //置空最短路径终点集

D2[v]=G->arcs[v1][v]; //置初始的最短路径值

if(D2[v]< Maxint)

p2[v]=v1; //v1是的前趋(双亲)

else

p2[v]=0; //v 无前趋

} // End_for

D2[v1]=0;S[v1]=TRUE; //S集初始时只有源点,源点到源点的距离为0

//开始循环,每次求的V1到某个V顶点的最短路径,并加V到S集中 for(i=2;i

{ //其余n-1个顶点

min=Maxint; // 当前所知离v1顶点的最近距离,设初值为∞ for(w=1;w<=n;w++) //对所有顶点检查

if(!S[w] && D2[w]

{ //找离v1最近的顶点w,并将其赋给v,距离赋给min

v=w; //在S集之外的离v1最近的顶点序号

min=D2[w]; //最近的距离

} //W顶点距离V1顶点更近

S[v]=TRUE; //将v并入S集

for(w=1;w<=n;w++) //更新当前最短路径及距离

if(!S[w]&&(D2[v]+G->arcs[v][w]

{ //修改D2[w]和p2[w], w 属于 V-S

D2[w]=D2[v]+G->arcs[v][w]; //更新D2[w]

p2[w]=v;

} //End_if

} //End_for

printf ("路径长度路径\n");

for(i=1;i<=n;i++)

{ printf ("%5d", D2[i]);

printf ("%5d", i);v=p2[i];

while(v!=0) {

printf ("<-%d", v);

v=p2[v];

}

printf("\n");

}

}

//文件名 floyd.c(费洛伊德算法)

void Floyd(MGraph *G, int n)

{

int i, j, k;

for(i=1;i<=n;i++) //设置路径长度D和路径path初值

for(j=1;j<=n;j++)

{

if(G->arcs[i][j]!=Maxint)

p[i][j]=j; //j是i的后继

else

p[i][j]=0;

D[i][j]=G->arcs[i][j];

}

for(k=1;k<=n;k++) {

{ //做K次迭代,每次均试图将顶点K扩充到当前求得的从i到j的最短路径pij上

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

{ if(D[i][k]+D[k][j]

D[i][j]=D[i][k]+D[k][j]; //修改长度

p[i][j]=p[i][k];

}

}

}

}

}

void main()

{ MGraph * G;

int n, e, v, w, k;

int xz=1;

G=(MGraph *)malloc(sizeof(MGraph));

printf("输入图中顶点个数和边数n,e: ");

scanf("%d,%d", &n, &e);

CreateMGraph(G, n, e); //建立图的存储结构

while(xz!=0)

{

printf(" 求城市之间的最断路径 \n");

printf("-------------------------------\n");

printf("1.求一个城市到所有城市的最短路径\n"); printf("2.求任意的两个城市之间的最短路径\n");

printf("--------------------------------\n");

printf(" 请选择:1 或 2,选择0 :退出: "); scanf("%d",&xz);

if(xz==2)

{

Floyd(G,n); //调用费洛伊德算法

printf("输入起点和终点: v,w:");

scanf("%d,%d",&v,&w );

k=p[v][w]; //k为起点v的后继顶点

if(k==0)

printf("顶点%d 到%d 无路径! \n",v,w);

else

数据结构课程设计交通咨询系统

课程设计报告 课程名称数据结构课程设计 课题名称交通咨询系统 专业通信工程 班级通信1001班 学号 姓名 指导教师田娟秀胡瑛曹燚 2012年7 月 6 日

湖南工程学院 课程设计任务书 课程名称数据结构 课题交通咨询系统 专业班级通信1001班 学生姓名 学号 指导老师田娟秀胡瑛曹燚 审批田娟秀 任务书下达日期2012 年7 月 1 日任务完成日期2012 年7 月 6 日

1.1任务书 课题六:交通咨询系统: 在交通网络非常发达的今天,人们出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间等问题也很感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。图中顶点表示城市,边表示城市之间的交通关系。设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到达另外一个城市顶点之间的最短路径(里程)的问题。 要求完成以下功能: (a) 以图中顶点表示湖南省各市(至少包括8个以上的城市),存放城市名称、代号、简介等信息,以边表示路径,存放路径长度等有关信息,先建立交通网络图的存储结构; (b) 为用户提供图中任何城市有关信息的查询; (c) 为用户提供任意城市的交通查询,即查询任意两个城市之间的一条最短路径。 (d) 为用户提供指定城市的交通查询,即查询指定城市到其他城市之间的最短路径。 选做内容: (1)提供图的编辑功能:增、删城市;增删路径;修改已有信息等; (2)交通图的仿真界面。 1.2 选题方案: 所选题目根据学号确定,学号模6加1,即(学号%6+1)。如你的学号为9,则 所选题目号为:9%6+1=(题目4)。注意,所有的课题都要求用图形方式演示步骤 和结果。同学们可以自己针对数据结构课程中所讲算法来设计一个演示过程的算法。 1.3设计要求: 1.3.1 课程设计报告规范 (1)需求分析 a.程序的功能。 b.输入输出的要求。 (2)概要设计 a.程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系;每个模 块的功能。

数据结构课程设计交通咨询系统设计-参考模板

设计题目<二>:7.3.4交通咨询系统设计P160 一、设计要求 1.问题描述 根据不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能的短,出门旅行的旅客希望旅费尽可能的少,而老年人则要求中转次数少。模拟一个全国城市之间的咨询交通程序,为旅客提供两种或三种最优的交通路线。 2.需求分析 二、概要设计 1.主界面设计 (图2.1“交通咨询系统”主菜单) 2.存储结构设计 本系统采用图结构类型存储抽象交通咨询系统的信息。 typedef struct TrafficNode { char name[MAX_STRING_NUM]; //班次//MAX_STRING_NUM最为10 int StartTime, StopTime; //起止时间 int EndCity; //该有向边指向的顶点在数组中的位置,即该城市编号 int Cost; //票价

} TrafficNodeDat; typedef struct VNode { CityType city; int TrainNum, FlightNum; //标记下面Train数组和Flight数组里元素个数 TrafficNodeDat Train[MAX_TRAFFIC_NUM]; //数组成员为结构体,记录了到达城市、起止时间、票价和班次 TrafficNodeDat Flight[MAX_TRAFFIC_NUM]; // int Cost; //遍历时到达该城市的耗费(时间或者费用) } VNodeDat; typedef struct PNode { int City; int TraNo; } PNodeDat; 3.系统功能设计 (1)添加城市。添加一个城市的名称 (2)删除城市。输入一个城市名称,删除该城市。 (3)添加交通路线。输入起始城市、终点城市、航班或火车、车次、起始时间、终点时间和票价 (4)删除交通路线。输入火车或飞机的班次删除该交通路线。 (5)查询最小费用路线。输入起始城市、终点城市、航班或火车、车次、起始时间、终点时间查询最小费用路线。 三、模块设计 1.模块设计 (图2.2 模块调用示意图)

数据结构--交通咨询系统

目录 1 概述 (2) 1.1 问题描述 (2) 1.2 实现意义 (2) 2 系统分析 (2) 2.1 需求分析 (2) 2.1.1程序的功能 (2) 2.1.2输入输出的要求 (2) 2.2 设计思想 (2) 2.3 设计要求 (3) 3 概要设计 (3) 3.1用邻接矩阵建立交通网络模块 (3) 3.2 查询任意两个顶点之间的最短路径 (4) 3.3 查询一个城市到其他所有城市的最短路径 (5) 4 详细设计 (5) 4.1 用邻接矩阵构造图结构函数CreateMGraph() (5) 4.2 费洛伊德Floyd() (6) 4.3 迪杰斯特拉Dijkstra() (6) 4.4 主要函数流程图及其函数调用 (7) 4.4.1 主要函数流程图 (7) 4.4.2 一个城市到其他城市的路径调用 (8) 4.4.3 任意两个城市之间路径调用 (8) 5 运行与测试 (8) 5.1 有向图存储结构的建立模块的输出 (9) 5.2 单源路径迪杰斯特拉算法模块的输出 (10) 5.3 费洛伊德算法模块的输出 (10) 6 总结与心得 (10) 参考文献 (11) 附录 (11)

1 概述 1.1 问题描述 在交通网络非常发达,交通工具和交通方式不断更新的今天,人们在出差、旅游或做其它出行时,不仅关心节省费用,而且对里程和所需时间等问题也感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。图中顶点表示城市之间的交通关系。这个交通系统可以回答旅客提出的各种问题。比如任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。 1.2 实现意义 便于人们的日常出行,且更好地满足了用户的出行需求。这种最短路径问题的计算方法既简单又便于实现,同时大大提高了计算机的运行速率。 2 系统分析 2.1 需求分析 2.1.1程序的功能 (1)用户自己可以建立不同的路径之间的关系网(2)可以查询某个城市到达其余各城市的最短路径。(3)可以任一查询两个城市之间的最短路径。 2.1.2输入输出的要求 在刚进入主界面后系统提示输入建立交通网络储存结构,输入顶点个数和和边数为整数不能输入其他字符,随后系统提示输入边与边之间的关系分别为i,j,w表示边之间的距离。然后进入查询页面,输入整数1,2,0分别表示你所要查询的功能:一个城市至其他所有城市的最短路径查询、任意两个城市之间的最短路径查询、退出程序。不能输入其他字符否则不能执行操作。在整个操作都是用整数表示城市。 2.2 设计思想 用邻接矩阵来存储交通网络图的信息,运用迪杰斯特拉算法实现图上单源最短路径问题,然后运用费洛伊德算法实现图中任意一对顶点间最短路径问题,这样就会实现交通咨询系统设计的问题。

交通咨询系统设计报告

重庆科技学院 《数据结构》课程设计 报告 学院:_电气与信息工程学院_ 专业班级: 计科2 学生姓名: 学号: 设计地点(单位)__ _ 计算机基础自主学习中心__ _ _ 设计题目:________ 交通咨询系统设计__ ___ _ _ 完成日期:2012年7 月6 日 指导教师评语: ______________________ _________________ ________________________________________________________________________________________________ ________________________________________________________________________________________________

_________ __________ _ 成绩(五级记分制):______ __________ 指导教师(签字):________ ________ 重庆科技学院 课程设计任务书 设计题目:交通咨询系统的设计

系主任:雷亮指导教师:黄永文/王双明/熊茜/彭军/王成敏 2012年6月20日 摘要

在交通网络非常发达,人们在出差、旅游出行时,往往关心节省交通费用或节省所需要的时间等问题。对于这样一个人们关心的问题,可以用一个图结构来表示交通网络,利用计算机建立一个交通咨询系统。图中顶点表示城市,边表示城市之间的交通情况,其权值可代表里程、交通费用或时间。比如任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。 本次设计的交通咨询系统主要是运用C语言的数据结构来完成交通图的存储、图中顶点的单源最短路径和任意一对顶点间的最短路径问题。 关键词:数字结构C语言交通咨询最短路径

全国交通咨询模拟数据结构课程设计

数据结构课程设计报告 题目:全国交通咨询模拟 一.需求分析 1.程序设计任务:从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。利用该系统实现两种最优决策:最快到达或最省钱到达。 2. 明确规定: (1) 输入形式和输入值的范围:每条飞机弧或者火车弧涉及的信息量很多,包括:起始城市、目的城市、出发时间、到达时间、班次以及费用。作为管理员要输入的信息包括以上信息,而作为用户或者客户,要输入的信息有起始城市和目的城市,并选择何种最优决策。 (2) 输出形式:按用户提供的最优决策的不同而输出不同的信息,其中输出的所搭飞机或火车的班次及其起始地点和终点、起始时间和出发时间还有相关的最优信息,比如最快经多少时间到达、最省钱多少钱到达和最少经多少中转站到达。 (3) 程序所能达到的功能 a. 该系统有供用户选择的菜单和交互性。可以对城市、列车车次和飞机航班进行 编辑,添加或删除。 b. 建立一个全国交通咨询系统,该系统具备自动查找任意两城市间铁路、飞机交通的最短路径和最少花费及中转次数最少等功能。 c. 初始化交通系统有两种方式,键盘和文档。

二.设计概要 1.算法设计 (1)、总体设计 (1)数据存储:城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。建议把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。 (2)数据的逻辑结构:根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间(要 包括中转站的等候时间)或旅费。 (3)数据的存储结构:采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。这里采用邻接表作为数据的存储结构。 (4)用不同的功能模块对城市信息和交通信息进行编辑。添加、修改、删除 功能可用菜单方式或命令提示方式。只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面。 (5)最优决策功能模块(fast or province)。 ①读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的城市有交通联系的城市(代码、里程、航班、列车车次)。 ②根据具体最优决策的要求,用Dijkstra算法求出出发城市到其它各城市 的最优值(最短时间或最小的费用),搜索过程中所经过城市的局部最优信息都保存在邻接表的表头数组中。其目的城市所代表的元素中就保存了所需的最优决策结果。这过程中,要用队列或栈保存局部最优决策值(局部最短的时间或最省的费用)变小的城市,其相应的初始值可为%,并在表头数组对应的城市元素中保 存响应的信息。开始时,栈(队列)中只有出发地城市,随着对栈(队列)顶(首)城市有交通联系的城市求得决策值(最短时间或最小的费用),若该值是局部最优值且该城市不在栈(队列)中,则进栈(队列),直至栈(队列)为空,本题采用队列实现。 ③输出结果:从目的城市出发,搜索到出发城市,所经过的城市均入栈(队列),再逐一出栈栈(队列)中的城市,输出保存在表头数组中对应城市的信息 (对 方城市的出发信息,里程、时间、费用等)及最终结果。即输出依次于何时何地乘坐几点的飞机或火车于何时到达何地;最终所需的最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间。 (6)主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。 (2).详细设计思想: 本题所要求的交通系统是一个有向带权图结构,考虑到要求该系统有动态增加飞机和列车航班的功能,因而采用邻接表的形式存储:对每个顶点建立一个 单链表,单链表中的子结点表示以该顶点连接的弧,单链表中子结点的顺序可以 按权值递增的顺序排列,表头结点按顺序存储。题目中提到要提供三种策略,最快到达,最省钱到达和最少中转次数策略,前两种策略采用迪杰斯特拉算法思想,其中最快到达的权值为到达两城市所需的最短时间,最省钱到达的权值为到达两城市所需的费用,后一种采用广度优先算法的思想,只需求的两城市所在的层数,就可以求的到达两城市所需的最少中转次数。

数据结构课程设计全国交通咨询系统方案

工业应用技术学院 课程设计任务书 题目全国交通资询系统 主要容: 设计了一个方便用户查询交通咨询系统。该系统所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。该系统可以进行城市,列车车次和飞机航班的编辑的基本信息输入操作。程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。 基本要求: 1、掌握C语言的变量及函数的灵活使用; 2、熟练掌握图的深度、广度优先遍历算法思想及其程序实现; 3、掌握C语言中文件的基本操作; 4、掌握VC++6.0软件的熟练使用。 主要参考资料: [1] 春葆.数据结构程序设计[M].:清华大学,2002,03 [2] 王黎,袁永康https://www.360docs.net/doc/411344013.html,战略[M].:清华大学,2002,01 [3] 谭浩强.C程序设计第二版[M].:清华大学,2003,03 [4] 任哲.MFC Windows程序设计[M].:清华大学,2004,06 完成期限:2016.12.05—2017.01.05 指导教师签名: 课程负责人签名:

随着高科技的飞速发展,列车、飞机、动车、高铁的出现极大的减少了人们花在旅途上的时间。对于城市间错综复杂交通网的管理,是一项庞大而复杂的工作。在此基础上,如何实现交通网智能化的管理达到帮助乘客选择经济高效的交通工具是目前仍处空白。尤其乘客交通工具的择优选择是一个令人懊恼的工作,一个原因就是各种交通工具的查询十分分散和繁琐。即使有互联网的帮忙,但是没有一个统一的归类、没有一个精细的算法、系统的软件帮助,人们仍然无法获得最优方式。为此开发一个交通择优系统是十分必要的。采用计算机对城市间的交通工具进行系统录入和管理,进一步提高了交通部门针对城市间客运网络的管理效率,实现交通运营网络的系统化、规化和自动化。同时使乘客能通过网络进行称心的交通工具的选择,这也是交通网络优选智能决策的体现。交通信息的咨询和管理是交通部门管理工作中异常重要的一个环节,因此,运用交通资询管理系统对春运时减轻乘客购票压力、舒缓紧的城际拥堵有重要意义。 关键字:错综复杂;智能化;最优方式;择优系统

交通咨询系统 C语言

CHINA 交通咨询系统

目录 一、需求分析 (2) 1、程序的功能及设计要求 (2) 2、输入输出的要求 (2) 二、环境说明 (2) 三、详细设计 (3) 1、模块设计 (3) 2、画出各函数的调用关系图、主要函数的流程图。 (3) 2、详细代码 (4) 四、调试分析 (4) 1、测试数据: (4) 2、借鉴的资料 (5) 五、课程总结 (6) 六、附录 (6)

一、需求分析 1、程序的功能及设计要求 在交通网络非常发达、交通工具和交通方式不断更新的今天, 人们在出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间等问题也感兴趣。对于这样一个人们关心的问题,通过建立交通网络图的存储结构图,提供用户查询的功能,功能一:通过输入城市名及任意两个城市的距离,查询任意两个城市之间的最短距离,从而达到最省目的;功能二:通过输入城市名以及任意两个程序的距离,查询中转路线最少。程序所具有的功能特色本程序主要目的是为了给用户提供路径咨询,可以通过输入设置,延续程序的拓展性。 设计要求及分析 设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的中转次数最少问题或最低花费或最少时间(最短路径)问题。 该设计共分三个部分:一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后再实现任意两个城市顶点之间的最短路径问题。 1. 建立交通网络图的存储结构 要实现设计要求,首先要定义交通图的存储结构:邻接链表和邻接矩阵; 2. 解决任意两个城市顶点之间的中转次数最少的问题; 3. 解决任意两个城市顶点之间的最短路径(最低花费或最少时间)问题。 2、输入输出的要求 定义变量类型应该保持类型一致,通过键盘输入,确保输入输出一致,使最短路径途径以及最短路径能够简单明了的输出,同时保持程序简洁美观,效果明显。输入要求为输入界面直观、亲切;有利于快速输入;有利于准确输入;有利于输入、修改;方便操作。输出要求:输出要求应简单、直观,一目了然,尽量符合用户的习惯,便于用户阅读、理解与使用。输出内容应尽量汉字化,从而使输出格式醒目;各种输出设计要长考虑以利于系统发展和输出项目扩充、变动的需要;输出操作方便 二、环境说明 系统:WINDOS7 开发软件:vc6+

数据结构课程设计交通咨询系统设计

信息科学与工程学院课程设计任务书 题目:交通咨询系统设计 学号: 201112220141 姓名: 年级: 专业:计算机应用与技术 课程:数据结构 指导教师:职称: 完成时间:

课程设计任务书及成绩评定

一、需求分析 设计一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一城市顶点之间的最短路径(里程)或最低花费或最少时间等问题。对于不同的咨询要求,可输入城市间的路程或所需时间或所需费用。 本设计共分三部分,一是建立交通网络图的存储结构;二是解决单源最短路径问题;三是实现任两个城市顶点之间的最短路径问题。 1.1.1建立图的存储结构 邻接矩阵是表示图形中顶点之间相邻关系的矩阵。图的邻接矩阵是定义如下的n 阶方阵: 设G=(V ,E )是一个图,结点集为 {} n v v v V ,,,21 =。 G 的邻接矩阵,E ,,0E ,,)(,)(???? ?>?<∞>∈<==??j i j i j i j i n n j i ij n n ij v v v v v v v v w a a A )或当(,或)或当(, 当邻接矩阵的行表头、列表头顺序一定时,一个图的邻接矩阵表示是唯一的。 图的邻接矩阵表示,除了需用一个二维数组存储顶点之间的相邻关系的邻接矩阵外,通常还需要使用一个具有n 个元素的一维数组来存储顶点信息,其中下标为i 的元素存储顶点i 的信息。因此,图的邻接矩阵的存储结构定义如下: 1.1.2 单源最短路径 最短路径的提法很多。在这里先讨论单源最短路径问题:即已知有向图(带权),我们希望找出从某个源点S ∈V 到G 中其余各顶点的最短路径。 为了叙述方便,我们把路径上的开始点称为源点,路径的最后一个顶点为终点。那么,如何求得给定有向图的单源最短路径呢?迪杰斯特拉(Dijkstra )提出按路径长度递增产生诸点的最短路径算法,称之为迪杰斯特拉算法。 迪杰斯特拉算法求最短路径的实现思想是:设G=(V ,E )是一个有向图,

2数据结构_全国交通咨询模拟系统实验报告

全国交通咨询模拟 一、设计目的 掌握线性表、栈、图结构和对文件的操作,学习屏幕编辑和菜单技术,掌握用最短路径及其搜索算法编制较综合性的程序,能用图的邻接存储结构求解最优路线问题,解决有关实际问题。得到软件设计技能的训练。 二、问题描述 交通咨询模拟。根据旅客的不同需要,要考虑到旅客希望在旅途中的时间尽可能短、希望旅费尽可能省等的要求。 三、基本要求 1、对城市信息(城市名、城市间的里程)进行编辑:具备添加、修改、删除功能; 2、对城市间的交通工具:火车。对列车时刻表进行编辑:里程、和列车班次的添加、修改、删除; 3、提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具,可以不考虑回程; 4、咨询以用户和计算机对话方式进行,要注意人机交互的屏幕界面。由用户选择最优决策原则和交通工具,输入起始站、终点站、出发时间,输出信息:最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间,并详细说明依次于何时何地乘坐哪一趟列车何时到达何地。

四、具体实现 1、思路 (1) 数据存储。城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。在实验中本想用文本储存数据,但操作不熟悉,而是改用图的邻接矩阵储存原始信息,而后用数组进行添加删改 (2) 数据的逻辑结构。根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为无向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的时间)或旅费。 (3) 数据的存储结构。采用邻接表和邻接矩阵都可作为数据的存储结构,这里建议采用邻接矩阵作为数据的存储结构。 (4) 用不同的功能模块对城市信息和交通信息进行编辑。添加、修改、删除功能可用菜单方式或命令提示方式。只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面,具体实现由学生自行设计,也可参考有关程序(届时在网上提供)。这些工作有不小的工作量。 (5) 最优决策功能模块 ① 读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的城市有交通联系的城市(代码、里程、列车车次)。 ② 根据具体最优决策的要求,用floyd算法求出出发城市到其它各城市的最优值(最短时间或最小的费用),搜索过程中所经过城市的局部最优信息都保存在邻接表的表头数组中。其目的城市所代表的元素中就保存了所需的最优决策结果。其相应的初始值可为∞,并在表头数组对应的城市元素中保存响应的信息。 ③主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。 2、数据结构 本程序运用了关于图这种数据结构。 他的抽象数据类型定义如下: typedef struct unDiGraph

交通咨询系统设计

《数据结构课程设计》实验报告 编号实验五实验项目名称交通咨询系统设计 学时数3课时指导教师冯韵班 级 计科一班 学 号 33 姓 名 周兴 实验日期2010-10-16 成绩 一、实验目的:设计一个交通咨询系统能让旅客咨询从任意一个城市顶点到另一城市顶点之间的最短路径或最低花费或最少时间等问题。 二、内容与设计思想:(设计思想、主要数据结构、主要代码结构、主要代码段分析) 1.设计思想:一是用有向图的邻接矩阵建立交通网络图的存储结构;二是是用迪杰斯特拉(Dijkstra)算法解决源点到所有点的最短路径问题;三是用费罗伊德(Floyd)算法算出任意两点之间的最短路径。 2.主要数据结构:1.建立有向图的存储结构 2.迪杰斯特拉算法 3.费罗伊德算法 4.主框架函数的实现 3.主要代码结构: {//采用邻接矩阵表示法构造有向图G,n,e表示图的当前顶点数和边数 int i,j,k,w; for(i=1;i<=n;i++) G->vexs[i]=(char)i; for(i=1;i<=n;i++) for(j=1;j<=n;j++) G->arcs[i][j]=Maxint; printf("输入%d条边的i,j及w:\n",e); for(k=1;k<=e;k++){ scanf("%d,%d,%d",&i,&j,&w); G->arcs[i][j]=w; } printf("有向图的存储结构建立完毕!\n"); } void Dijkstra(MGraph*G,int v1,int n) { int D2[MVNum],P2[MVNum]; int v,i,w,min; enum boolean S[MVNum]; for(v=1;v<=n;v++){ S[v]=FALSE; D2[v]=G->arcs[v1][v]; if(D2[v]

大数据结构课程设计交通咨询系统设计

设计题目<二>:交通咨询系统设计P160 一、设计要求 1 .问题描述根据不同目的的旅客对交通工具有不同的要求。例如,因公出差的旅客希望在旅途中的时间尽可能的短,出门旅行的旅客希望旅费尽可能的少,而老年人则要求中转次数少。模拟一个全国城市之间的咨询交通程序,为旅客提供两种或三种最优的交通路线。 2.需求分析 二、概要设计 1.主界面设计 (图“交通咨询系统”主菜单) 2.存储结构设计 本系统采用图结构类型存储抽象交通咨询系统的信息 typedef struct TrafficNode

tmp = k; } printf("%s", AdjList[track[i]].Train[tmp].name); pri ntf("%2d:%2d-%2d:%2d", AdjList[track[i]].Trai n[tmp].StartTime / 60, AdjList[track[i]].Train[tmp].StartTime % 60, AdjList[track[i]].Trai n[tmp].StopTime / 60, AdjList[track[i]].Trai n[tmp].StopTime % 60); else { for (i--; i>0; i--) um; [k++) ghar name[MAX_STRlNG_NUM];jajnN

{ printf("\n%s:", CityName[track[i]]); end = track[i - 1]; min = 32767; for (k = 0; kAdjList[track[i]].Flight[k].Cost) { min = AdjList[track[i]].Flight[k].Cost; tmp = k; } printf("%s", AdjList[track[i]].Flight[tmp].name); printf("%2d:%2d-%2d:%2d", AdjList[track[i]].Flight[tmp].StartTime / 60, AdjList[track[i]].Flight[tmp].StartTime % 60, AdjList[track[i]].Flight[tmp].StopTime / 60, AdjList[track[i]].Flight[tmp].StopTime % 60);

全国交通咨询系统设计 C语言

/* *建立一个模拟的交通网络(用有向网来表示),编程实现从某个城市*出发到另一个城市所需的最短的时间及路径。* *建立一个模拟的交通网络(用有向网来表示),编程实现从某个城市*出发到另一个城市所需的最短的时间及路径。* */ #define MAX_VERTEX_NUM 18 #define NULL 0 #define MAX_ARC_SIZE 100 #define MAX_ROUTE_NUM 5 #include"" #include"" #include"" #define False 0 #define True 1 #define INFINITY 10000 /*预定义*/ typedef struct { int number; float expenditure; int begintime[2]; int arrivetime[2]; }Vehide; typedef struct { Vehide stata[MAX_ROUTE_NUM]; int last; }infolist; typedef struct ArcNode { int adjvex; struct ArcNode *nextarc; infolist info; }ArcNode; typedef struct VNode { char cityname[10]; ArcNode *planefirstarc,*trainfirstarc; }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct { AdjList vertices; int vexnum,planearcnum,trainarcnum; }ALGraph; typedef struct Node {

交通咨询系统设计

信息学院课程设计 题目:交通资询系统 姓名:郑伟 学号: 201112110138 班级:本科一班 课程:数据结构 指导教师:杨振 2012年12月24日

课程设计任务书及成绩评定

目录 1.目的与要求 (1) 1.1设计目的 (1) 1.2设计内容 (1) 1.3设计思想 (1) 1. 4设计要求 (2) 2程序流程图 (2) 3程序源代码 (3) 4编译与运行 (8) 5课程总结 (9)

1 目的与要求 1.1设计目的:掌握图的存储结构;掌握求图的顶点的度及各种邻接结点的操作;掌握迪杰斯特拉算法和弗洛伊德算法。 1.2设计内容:在交通网络非常发达,交通工具和交通方式不断更新的今天,人们在出差、旅游或做其它出行时,不仅关心节省费用,而且对里程和所需时间等问题也感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。图中顶点表示城市之间的交通关系。这个交通系统可以回答旅客提出的各种问题。比如任意一个城市到其他城市的最短路径,任意两个城市之间的最短路径问题。 本次设计的交通咨询系统主要是运用C语言来完成交通图的存储、图中顶点的单源最短路径和任意一对顶点间的最短路径问题。设计一个交通咨询系统,能让旅客咨询任一个城市到另一个城市之间的最短里程或最低花费或最少时间等问题。对于不同咨询要求,可输入城市间的路程或所需费用或所需时间。该交通咨询系统设计共三部分,一是建立交通网络图的存储结构;二是解决单源路径问题;最后再实现两个城市之间的最短路径问题。 1.3设计思想:用邻接矩阵来存储交通网络图的信息,运用迪杰斯特拉算法实现图上单源最短路径问题,然后运用费洛伊德算法实现图中任意一对顶点间最短路径问题,这样就会实现旅客所要咨询的问题。

交通图咨询查询系统数据结构(C语言) (2).docx

河动,求衣摩 信息科曇昌工程曇眈 《结构数据》 课程设计报告 课程设计名称:交通咨询系统 专业班级:计算机XXX _____________ 学生姓名:____________ XXX ____________ 学号: ______ 2015xxxx ________ 指导教师:XX ___________ 课程设计时间:___________ 2016.07.04—2016.07.08

计算机应用技术专业课程设计任务书 填表说明 1.“课题性质”一栏: A.工程设计: B.工程技术研究: 说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文〉首页

C.软件工程(如CAI课题等): D.文献型综述; E.其它。 2 ?“课題来源” 一栏: A.自然科学基金与部、省、市级以上科研课题; B.企、事业单位委托课题; C.校、院(系、部)级基金课题: D.自拟课题。

目录 1需求分析 (1) 1.1添加交通图信息 (1) 1.2査询单源最短路径 (1) 1.3査询多源最短路径 (1) 1.4更新交通图信息 (2) 1.6读取、保存信息 (2) 2概要设计 (3) 2.1数据类型的宦义 (3) 2.2功能模块结构图 (4) 3运行环境 (6) 4开发工具和编程语言 (6) 5详细设计 (7) 5.1图结构的基本操作 (7) 5.1.1添加城市结点和路径结点 (8) 5.1.2修改城市结点和路径结点 (8) 5.1.3删除城市结点和路径结点 (8) 5.1.4退出保存 (8) 5.2迪杰斯特拉算法的实现 (8) 5.2.1迪杰斯特拉算法函数 (8) 5.2.2提取迪杰斯特拉函数信息 (8) 5.2.3求多源最短路径 (8) 6程序编码 (9) 7运行结果 (41) 8心得体会 (46)

全国交通咨询系统设计C语言

全国交通咨询系统设计 C语言 公司标准化编码 [QQX96QT-XQQB89Q8-NQQJ6Q8-MQM9N]

/* *建立一个模拟的交通网络(用有向网来表示),编程实现从某个城市 *出发到另一个城市所需的最短的时间及路径。 * *建立一个模拟的交通网络(用有向网来表示),编程实现从某个城市 *出发到另一个城市所需的最短的时间及路径。 * */ #define MAX_VERTEX_NUM 18 #define NULL 0 #define MAX_ARC_SIZE 100 #define MAX_ROUTE_NUM 5 #include"stdio.h" #include"stdlib.h" #include"string.h" #define False 0 #define True 1 #define INFINITY 10000 /*预定义*/ typedef struct { int number; float expenditure; int begintime[2]; int arrivetime[2]; }Vehide; typedef struct { Vehide stata[MAX_ROUTE_NUM]; int last; }infolist; typedef struct ArcNode { int adjvex; struct ArcNode *nextarc; infolist info; }ArcNode; typedef struct VNode { char cityname[10]; ArcNode *planefirstarc,*trainfirstarc; }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct { AdjList vertices; int vexnum,planearcnum,trainarcnum; }ALGraph; typedef struct Node {

全国交通咨询模拟数据结构课程设计

全国交通咨询模拟数据结构课程设计 集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

数据结构课程设计报告 题目:全国交通咨询模拟 一.需求分析 1.程序设计任务: 从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。利用该系统实现两种最优决策:最快到达或最省钱到达。 2. 明确规定: (1)输入形式和输入值的范围: 每条飞机弧或者火车弧涉及的信息量很多,包括:起始城市、目的城市、出发时间、到达时间、班次以及费用。作为管理员要输入的信息包括以上信息,而作为用户或者客户,要输入的信息有起始城市和目的城市,并选择何种最优决策。 (2)输出形式: 按用户提供的最优决策的不同而输出不同的信息,其中输出的所搭飞机或火车的班次及其起始地点和终点、起始时间和出发时间还有相关的最优信息,比如最快经多少时间到达、最省钱多少钱到达和最少经多少中转站到达。 (3)程序所能达到的功能 a.该系统有供用户选择的菜单和交互性。可以对城市、列车车次和飞机航班进行编辑,添加或删除。

b.建立一个全国交通咨询系统,该系统具备自动查找任意两城市间铁路、飞机交通的最短路径和最少花费及中转次数最少等功能。 c.初始化交通系统有两种方式,键盘和文档。 二.设计概要 1. 算法设计 (1)、总体设计 (1) 数据存储:城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。建议把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。 (2) 数据的逻辑结构:根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的等候时间)或旅费。 (3) 数据的存储结构:采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。这里采用邻接表作为数据的存储结构。 (4) 用不同的功能模块对城市信息和交通信息进行编辑。添加、修改、删除功能可用菜单方式或命令提示方式。只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面。 (5) 最优决策功能模块(fast or province)。 ①读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所

交通咨询系统设计

交通咨询系统设计 实验目的和要求 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) //删除城市 { //删除城市

全国交通咨询模拟系统源代码

12050741班(郭晓湛,李佳豪,廖川,杨鹤) 课题:全国交通系统咨询模拟 源程序代码: #include #include #include #include #include #include #define INF 65535 //定义一个最大数定为无穷值#define MAX 23 using namespace std; static int c_number=10; static int k=0; static int v=0,z=0,r=0,t=0; typedef struct search { int c_transer; int c_cost;

int c_time; int f_cost; int f_time; }search; search m[20],x[20],n[20]; typedef int costAdj[MAX+1][MAX+1];//图邻接矩阵从1开始记数int Path[MAX+1][MAX+1];//图邻接矩阵从1开始记数 typedef struct unDiGraph { int numVerts; //结点 costAdj cost; //邻接矩阵 }unDiGraph,*UNG; //图的定义 typedef struct c_edit { char a[10]; }c_edit; c_edit add[10]; costAdj B,L;

//定位函数,输出城市列表,增添城市。 int pr(int i,int j) { int h=0; if (j==0) { h=i; } else if (j==1) { cin>>add[i].a; } switch(h)//运用switch语句。 { case(0):cout<<"";break; case(1) : cout<<"成都 ";break; case(2) : cout<<"西安 ";break; case(3) : cout<<"郑州 ";break; case(4) : cout<<"武汉 ";break; case(5) : cout<<"株洲 ";break;

相关文档
最新文档