数据结构与算法课程设计--城市公共交通最短线路.docVIP

数据结构与算法课程设计--城市公共交通最短线路.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构与算法 课程设计 问题描述及设计目的 城市公共交通最短线路,利用邻接矩阵来构建交通节点,邻接矩阵的行列编号即为交通中的节点,有行列决定的数据即为权值 基本的输入信息和条件: 输入总的节点个数,即为交通中的站点数目 ? ? 本程序中,站点的数目最大值为100。 2. 输入存在的通路,即为弧两个站点之间是联通的 ? ?弧的数目是有限制的,数目小于站点数目[n*(n-1)]/2 3. 输入存在通路的两点,即为两站点 ? ? 站点编号要小于站点总数目 应具备的功能 1. 确定起点的最短路径问题,即已知起始结点,求最短路径的问题。 2. 确定终点的最短路径问题,与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。 3. 确定起点终点的最短路径问题,即已知起点和终点,求两结点之间的最短路径。 设计思想、主要算法的实现、基本操作、子程序调用关系 1.Dijkstra算法的基本思想 按路径长度递增顺序求最短路径算法。 2.Dijkstra 算法的基本步骤 设V0是起始源点,S是已求得最短路径的终点集合。 V-S = 未确定最短路径的顶点的集合, 初始时 S={V0},长度最短的路径是边数为1且权值最小的路径。 下一条长度最短的路径: Vi ( V - S ,先求出V0 到Vi 中间只经 S 中顶点的最短路径; ② 上述路径中长度最小者即为下一条长度最短的路径; 将所求最短路径的终点加入S 重复直到求出所有终点的最短路径。 3.存储结构设计 本系统采用图结构类型(mgraph)存储抽象交通图的信息。其中:各站点间的邻接关系用图的邻接矩阵类型存储;图的顶点个数及边的个数由分量n、e表示,它们是整型数据。 数据结构如下: typedef struct { int no; //顶点编号 InfoType info; //顶点其他信息,这里用于存放边的权值 } VertexType; //顶点类型 typedef struct //图的定义 { int edges[MAXV][MAXV]; //邻接矩阵 int n,e; //顶点数,弧数 VertexType vexs[MAXV]; //存放顶点信息 } MGraph; //图的邻接矩阵类型 查询站点间的最短路程距离和路径 该功能是查询站点的最短路径,包括距离和线路,有Floyd( )函数实现。 输出邻接矩阵 该功能即输出图的邻接矩阵的值,由函数DispMat(g)实现 4.算法设计 分析实现功能的几个主要函数的代码构成和实现方式 (1).输出邻接矩阵 通过循环嵌套,即双重循环,打印矩阵数据 时间复杂度由站点数n确定T=O(n^2) void DispMat(MGraph g) //输出邻接矩阵g { int i,j; for (i=0;ig.n;i++) { for (j=0;jg.n;j++) if (g.edges[i][j]==INF) printf(%3s,∞); //表示两站点间不可达 else printf(%3d,g.edges[i][j]); printf(\n); } } (2).求最短路线 通过自递归,逐个输出最短路径所经过的站点编号 Ppath( )函数在path中递归输出从站点i到站点j的最短路径 void ppath(int path[][MAXV],int i,int j) //输入各条最短路经 { int k; k=path[i][j]; if (k==-1) return; ppath(path,i,k); //递归 printf(%3d,,k); //输出站点编号 ppath(path,k,j); } (3).求最短路线的距离 Path二维数组保存最短路径,它与当前的迭代的次数有关。 求A[i][j]时,path[i][j]存放从顶点i到j的中间编号大于k的最短路径上前一个结点的编号。在算法结束时,有二维数组path的值追溯,可以得到从i到j的最短路径,若path[i][j]=-1.则没有中间站点。 void Floyd(MGraph g) //弗洛伊德算法从每对顶点之间的最短路径 { int A[MAXV][MAXV],path[MAXV][MAXV]; int i,j,k,f,r,n=g.n; for (i=0;in;i++

文档评论(0)

ze122230743 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档