- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构1236.doc
交通咨询系统的开发
摘 要
此次课程设计主要运用图的知识,借助弗洛伊德算法实现最短路径的求解,完成了时间复杂度的计算,并依此实现交通系统的开发。首先对算法进行分析,即弗洛伊德思路算法思想的阐述,然后编写最短路程序。在算法设计是,首先生成邻接矩阵,然后再进行逐点比较,最后算出任意两点之间的最短路径。完成程序设计后,并举例完成交通咨询系统的开发。最后并扩展算法的应用即工程安排、设备更新等实际问题
目 录
1 绪 论 1
2 课题描述 1
3 算法时间复杂度 1
4 弗洛伊德算法的思路 2
5 弗洛伊德算法设计 2
6 具体实例 4
7 实例分析 6
总 结
参考文献
1 绪 论
自1946年第一台计算机问世以来,计算机产业的飞速发展已远远超出人们对它的预料,在某些生产线上,甚至一秒钟就能生产出一台微型计算机,产量猛增,价格低廉,这就使得它的应用范围迅速扩展。如今,计算机已深入到人类社会的各个领域。计算机的应用已不再局限于科学计算,而更多的用于控制、管理及数据处理等非数值计算的处理工作。于此相应,计算机加工处理的对象由纯粹的数值发展到字符、表格和图像等各种具有一定结构的数据,这就给程序设计带来一些新的问题。为了编写出一个“好”的程序,必须分析待处理的对象的特性以及各种处理对象之间存在的关系。这就是“数据结构”这门学科的形成和发展的背景。
2 课题描述
最短路问题short-path problem若网络中的每条边都有一个数值(长度、成本、时间等),则找出两节点(通常是源节点和阱节点)之间总权和最小的路径就是最短路问题。最短路问题是网络理论解决的典型问题之一,可用来解决管路铺设、线路安装、厂区布局和设备更新等实际问题
来决定的。整个算法的执行时间与该基本操作(乘法)重复执行的次数n3成正比,故时间复杂度为 。
4 弗洛伊德算法的思路UYI VEWRWE
次算法是从带权邻接矩阵cost出发,其基本思想如下:
假设求从定点到的最短路径,如果从到有弧,则从到存在一条长度为arcs[i][j]d的路径,该路径不一定是最短路径,尚需进行n次试探。首先考虑路径(vi, ,)是否存在(即判断弧(,),和(, )是否存在)。如果存在,则比较(,)和(, , )的路径长度取长度较短者为从到的中间顶点的序号不大于0的最短路径。加入在路径上再增加一个顶点,也就是说,如果(,…,v1)和(v1,…, )分别是当前找到的中间顶点的序号不大于0的最短路径,那么,(vi,…,v1,.., )就有可能是从到的中间顶点的序号不大于1的最短路径。将它和已经得到的从到中间顶点序号不大于0的最短路径相比较,从中选出中间顶点不大于1的最短路径之后,再增加一个顶点,继续进行试探。依次类推。在一般情况下,若(,…, )和(,…, )分别是从到的中间顶点的序号不大于的最短路径,则将(,…, ,…, )和已经得到的从到且序号不大于的最短路径相比较,取长度较短者便是从到的中间顶点的序号不大于的最短路径。这样在经过n次比较后,最后求得的必是从到的最短路径。
5 弗洛伊德算法设计
弗洛伊德算法最短路程序如下:
#define n 6
#define MaxNum 1000 /*定义一个最大数*/
#includestdio.h
/* 定义邻接矩阵类型 */
typedef int adjmatrix[n][n];
/* 建立图的邻接矩阵 */
void CreatMatrix(adjmatrix G)
{int i,j,k,e,arcnum;
printf(图中有%d个顶点\n,n);
for(i=0;in;i++)
for(j=0;jn;j++)
if(i==j) G[i][j]=0; /*对角线的值置为0*/
else G[i][j]=MaxNum; /*其它位置的值初始化为一个最大数*/
printf(请输入边的个数(5-30):);
scanf(%d,arcnum);
printf(请输入边的信息,按照起点,终点,权值的形式输入:\n);
for(k=0;karcnum;k++)
{scanf(%d,%d,%d,i,j,e); G[j-1][i-1]=G[i-1][j-1]=e; }
}
/*弗洛伊德算法*/
void Floyd(int G[n][n], int A[n][n], int P[n][n])
{
int i, j, k;
for (i=0; in; i++)
for(j=0;jn;j++)
{A[i][j]=G[i][j];P[i][j
文档评论(0)