- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
杨开成_数据结构(C语言)_chapt06[精选]
导航图(9) 图 基本概念和术语 存储结构 图的遍历 关节点问题 最小生成树 最短路径 邻接矩阵 邻接表 深度优先遍历 广度优先遍历 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 AOV网和AOE网 拓扑排序 关键路径 导航图(10) 图 基本概念和术语 存储结构 图的遍历 关节点问题 最小生成树 最短路径 邻接矩阵 邻接表 深度优先遍历 广度优先遍历 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 AOV网和AOE网 拓扑排序 关键路径 导航图(11) 图 基本概念和术语 存储结构 图的遍历 关节点问题 最小生成树 最短路径 邻接矩阵 邻接表 深度优先遍历 广度优先遍历 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 AOV网和AOE网 拓扑排序 关键路径 导航图(12) 图 基本概念和术语 存储结构 图的遍历 关节点问题 最小生成树 最短路径 邻接矩阵 邻接表 深度优先遍历 广度优先遍历 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 AOV网和AOE网 拓扑排序 关键路径 导航图(13) 图 基本概念和术语 存储结构 图的遍历 关节点问题 最小生成树 最短路径 邻接矩阵 邻接表 深度优先遍历 广度优先遍历 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 AOV网和AOE网 拓扑排序 关键路径 导航图(14) 图 基本概念和术语 存储结构 图的遍历 关节点问题 最小生成树 最短路径 邻接矩阵 邻接表 深度优先遍历 广度优先遍历 Prim算法 Kruskal算法 Dijkstra算法 Floyd算法 AOV网和AOE网 拓扑排序 关键路径 【问题描述】某人在N个城市之间旅行,城市之间是连通的,但由于地理环境方面的原因,不同城市之间的交通方式不同,当然花费也不同。问从某城市A出发到达城市B所需要的花费最少的路径是哪一条。 将问题复杂化?从某个源点到其他各顶点的最短路径 六、最短路径问题 【思考方式】 从顶点A出发,走哪条路径最短就能到达下一个顶点呢(不管到达的顶点具体是哪一个顶点!)? 接下来再思考,走哪条路径最短到达下一个顶点呢? 依此类推,我们就会得到全部的最短路径。 六、最短路径问题——Dijkstra 算法(1) 【算法思想】 设定S是已经找到最短路径的顶点的集合,一开始S中只包含一个源点顶点Vv。 设置一个存放N-1条路径的数组Path,存放源点到其他N-1个顶点的路径,即Path[i]表示Vv到Vi的路径。 一开始源点到邻接顶点的路径长度就是相应的出弧或边的权值,而到非邻接顶点的路径长度是∞。 接下来进行N-1次选择,每次都选择最短的一条路径,并且路径的终点不属于S集,然后将终点加入S集。 每当有新顶点Vj加入到S集时,都要尝试更新顶点Vj的不属于S集的邻接顶点的路径。 六、最短路径问题——Dijkstra 算法(2) typedef struct { int *route;/*路径上顶点的序列*/ int totalweight;/*路径长度,即路径上边或弧权值之和*/ }PATH; PATH * ShortestPathALGraph(ALGRAPH *alg,int v) { /*找出邻接表alg中,顶点Vv到其他各个顶点的最短路径,返回存放最短路径的数组的指针*/ PATH *Path; int n,w,i,j,k,m; int *S;/*集合标志*/ ARCNODEPTR p; n=alg-vexnum;/*获得顶点数*/ /*分配容纳n条路径的数组,包含源点到自身的路径*/ Path=(PATH *)malloc(n*sizeof(PATH)); if(Path==NULL)return NULL; S=(int *)malloc(n*sizeof(int));/*顶点的S集合标记*/ 六、最短路径问题——Dijkstra 算法(2) /*下面开始初始化Path数组,数组中存放各个顶点到Vv的路径及长度*/ for(i=0;in;i++) { Path[i].route=(int *)malloc(n*sizeof(int));/*分配路径静态链数组*/ Path[i].route[v]=i;/*设置初始路径为“Vv,Vi”*/ if(i==v) /*路径是源点到自身的路径,设置路径长度是0,并且设置S集标记为1*/ { Path[i].totalweight=0; S[i]=1; } else /*否则,复制暂时将路径长度设定为∞,设定S集标记为0*/
文档评论(0)