数据结构与算法课程设计城市公共交通最短线路Word格式.docx

上传人:b****5 文档编号:21268875 上传时间:2023-01-29 格式:DOCX 页数:11 大小:55.69KB
下载 相关 举报
数据结构与算法课程设计城市公共交通最短线路Word格式.docx_第1页
第1页 / 共11页
数据结构与算法课程设计城市公共交通最短线路Word格式.docx_第2页
第2页 / 共11页
数据结构与算法课程设计城市公共交通最短线路Word格式.docx_第3页
第3页 / 共11页
数据结构与算法课程设计城市公共交通最短线路Word格式.docx_第4页
第4页 / 共11页
数据结构与算法课程设计城市公共交通最短线路Word格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构与算法课程设计城市公共交通最短线路Word格式.docx

《数据结构与算法课程设计城市公共交通最短线路Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构与算法课程设计城市公共交通最短线路Word格式.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构与算法课程设计城市公共交通最短线路Word格式.docx

本系统采用图结构类型(mgraph)存储抽象交通图的信息。

其中:

各站点间的邻接关系用图的邻接矩阵类型存储;

图的顶点个数及边的个数由分量n、e表示,它们是整型数据。

数据结构如下:

intno;

typedefstruct

//顶点编号

的权值

查询站点间的最短路程距离和路径

该功能是查询站点的最短路径,包括距离和线路,有Floyd()函数

实现。

输出邻接矩阵

该功能即输出图的邻接矩阵的值,由函数DispMat(g)实现

4.算法设计

分析实现功能的几个主要函数的代码构成和实现方式

(1).输出邻接矩阵

通过循环嵌套,即双重循环,打印矩阵数据

时间复杂度由站点数n确定T=O(n^2)

voidDispMat(MGraphg)//输出邻接矩阵g

{

inti,j;

for(i=0;

i<

g.n;

i++)

for(j=O;

j<

g.n;

j++)

if©

edges[i][j]==INF)

printf("

%3s"

"

乂"

);

//表示两站点间不可达

else

%3d"

g.edges[i][j]);

\n"

(2).求最短路线

通过自递归,逐个输出最短路径所经过的站点编号

Ppath()函数在path中递归输出从站点i到站点j的最短路径

voidppath(intpath[][MAXV],inti,intj)//输入各条最短路

intk;

k=path[i][j];

if(k==-1)return;

ppath(path,i,k);

//递归

%3d,"

k);

//输出站点编号

ppath(path,k,j);

}

(3).求最短路线的距离

Path二维数组保存最短路径,它与当前的迭代的次数有关。

求A[i][j]时,path[i][j]存放从顶点i到j的中间编号大于k的最

短路径上前一个结点的编号。

在算法结束时,有二维数组path的值追

溯,可以得到从i到j的最短路径,若path[i][j]=-1.则没有中间站

点。

voidFloyd(MGraphg)//弗洛伊德算法从每对顶点

之间的最短路径

intA[MAXV][MAXV],path[MAXV][MAXV];

inti,j,k,f,r,n=g.n;

n;

i++)//给A数组置初值

for(j=0;

j<

n;

A[i][j]=g.edges[i][j];

path[i][j]=-1;

for(k=0;

k<

k++)//计算Ak

i<

if(A[i][j]>

(A[i][k]+A[k][j]))

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

path[i][j]=k;

printf("

\n输出需要查找的两个站点:

起点:

"

scanf("

&

f);

while(f>

二n)

该点不存在,请重新输入!

\n"

起点:

};

终点:

&

r);

while(r>

=n){

while(r==f){

不能等于起点,请重新输入!

\n”);

\n输出最短路径:

if(A[f][r]==INF){if(f!

=r)printf("

从%3d到%3d没有路径

f,r);

从%3d到%3d路径为:

f);

ppath(path,f,r);

r);

\t路径长度为:

%3d\n"

A[f][r]);

四、环境和工具、用户手册

1.环境与工具

VC++6.0

2•用户手册

本程序只能对程序原有的结点进行输入查找最短距离等基础功能,

不能用于对其它的邻接矩阵的查找操作。

五、详细设计(源程序清单)

#inelude<

stdio.h>

#defineMAXV100

〃最大顶点个数

#defineINF32767

//用32767表示乂

typedefintInfoType;

//假设InfoType为int类型

//以下定义邻接矩阵类型

{intno;

InfoTypeinfo;

//顶点其他信息,这里用于存放边的权值

}VertexType;

//顶点类型

〃图的定义

 

{intedges[MAXV][MAXV];

//邻接矩阵

intn,e;

//顶点数,弧数

VertexTypevexs[MAXV];

//存放顶点信息

}MGraph;

〃图的邻接矩阵类型

voidDispMat(MGraphg)

〃输出邻接矩阵g

{inti,j;

14;

{for(j=0;

oo"

}}

voidppath(intpath[][MAXV],inti,intj)//输入各条最短路经

{intk;

voidFloyd(MGraphg)//弗洛伊德算法从每对顶点之间的最短路径

{intA[MAXV][MAXV],path[MAXV][MAXV];

inti,j,k,f,r,n=14;

i++)//给A数组置初值

{A[i][j]=g.edges[i][j];

//计算Ak

for(k=O;

n;

k++)

{for(i=0;

{A[i][j]=A[i][k]+A[k][j];

}}

\n输出需要查找的两个站点(站点编号为0-13):

scanf("

{printf(”该点不存在,请重新输入!

};

终点:

该点不存在,请重新输入!

不能等于起点,请重新输入!

\n输出最短路径:

二r)printf("

从%3d到%3d没有路径\n"

{printf("

从%3d到%3d路径为:

}}

voidmain()

交通网路的邻接矩阵为\n"

MGraphg;

int

A[14][14]={{32767,32767,32767,32767,32767,32767,32767,8,32767,32767,

32767,32767,32767,32767},{32767,32767,32767,32767,32767,32767,32767

6,32767,8,32767,32767,32767,32767},{32767,32767,32767,32767,32767,3

2767,32767,32767,32767,7,32767,32767,32767,32767},{32767,32767,3276

7,32767,32767,32767,32767,32767,5,32767,7,32767,32767,32767},{32767,

32767,32767,32767,32767,32767,32767,32767,32767,32767,6,32767,32767,

9},{32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,327

67,6,32767,8},{32767,32767,32767,32767,32767,32767,32767,32767,32767

32767,32767,32767,6,32767},{32767,6,32767,32767,32767,32767,32767,3

2767,32767,32767,32767,32767,32767,32767},{8,32767,32767,5,32767,327

67,32767,32767,32767,32767,32767,32767,32767,32767},{32767,8,7,32767

32767,32767,32767,32767,32767,32767,32767,32767,32767,32767},{3276

7,32767,32767,7,6,32767,32767,32767,32767,32767,32767,32767,32767,32

767},{32767,32767,32767,32767,32767,6,32767,32767,32767,32767,32767,

32767,1,32767},{32767,32767,32767,32767,32767,32767,6,32767,32767,32

767,32767,1,32767,32767},{32767,32767,32767,32767,9,8,32767,32767,32

767,32767,32767,32767,32767,32767}};

g.edges[i][j]=A[i][j];

DispMat(g);

Floyd(g);

六、结果分析及算法评价

程序主界面及输入起点:

输入起点终点输出最短路径:

』"

D\vc60\MSDev9B\MyProject$\Sdf\Debug\safnexe"

屮巨*x

■■■I

交通网路的邻接矩阵为

Q

CO

g

S

co

oo

co-

OO

OD

6

a

CSC

OG

0O

?

cx>

oo-

8

5

□O

&

9

eo

1oo

OQ

DO

s

OQ-

oc-

7

G

€O

1

cs?

输出需要查找的两个站点(站点编号为42);

起点;

3

输出最短路径:

地3到嚼径为

3,

8,

0,

7,

‘9

路径长度为:

Pressanu

key

1to

continue-

'

V

总结分析

此次算法的编辑过程,使我熟练的掌握了邻接矩阵存储结构的使用,从另一面了解到迪克斯拉算法,更深刻的意识到清晰的思路能够使程序简单明了。

经过多次的调试与编译,最终程序的运行结果达到自己的要求。

通过课程设计的练习,强化自己对所学知识的掌握及对问题分析和任务定义的理解,对每到题目作出了相应的逻辑分析和数据结构的选择,通过对任务的分析,为操作对象定义相应的数据结构,以过程化程序设计的思想方法为原则划分各个模块,定义数据的抽象数据类型。

通过程序的编译掌握对程序的调试方法及思想,并且让自己学会使用一些编程技巧。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1