- 1、本文档共113页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[研究生入学考试]数据结构 第 7 章 图
算法的实现要点: 显然,求ve的顺序应该是按拓扑有序的次序; 而求vl的顺序应该是按拓扑逆序的次序; 因为拓扑逆序序列即为拓扑有序序列的 逆序列, 因此 应该在拓扑排序的过程中, 另设一个“栈”记下拓扑有序序列。 Status TopologicalOrder(ALGraph G,Stack T) { FindinDdegree(G,indegree); InitStack(T); count=0; ve[0..G.vexnum-1]=0; while(!StackEmpty(S)) { pop(S,j);Push(T,j); ++count; for(p=G.vertices[j].firstarc; p; p=p-nextarc) { k=p-adjvex; if(--indegree[k]==0) Push(S,k); if(ve[j]+*(p-info)=dut(j,k) ve[k]=ve[j]+*(p-info); } } if(countG.vexnum) ruturn ERROR; else return OK; } Status CriticalPath(ALGraph G) { if(!TopologicalOrder(G,t)) return ERROR; vl[0.. G.vexnum-1]=ve[G.vexnum-1]; while(!StackEmpty(T)) for(Pop(T,j),p=G.vertices[j].firstarc; p;p=p-vextarc) { k=p-adjvex; dut=*(p-info); if(vl[k]-dutvl[j]) vl[j]=vl[k]-dut; } for(j=0;jG.vexnum;++j) for(p=G.vertices[j] .firstarc; p;p=p-nextarc) { k=p-adjvex; dut=*(p-info); ee=ve[j]; el=vl[k]-dut; tag=(ee==el)? ‘*’:’’ printf(j,k,dut,ee,el,tag); } } 作业:7.9、7.10 7.6 最短路径 典型用途:交通网络的问题——从甲地到乙地之间是否 有公路连通?在有多条通路的情况下,哪一条路最短? 交通网络用有向网来表示:顶点——表示城市,弧—— 表示两个城市有路连通,弧上的权值——表示两城市之间的 距离、交通费或途中所花费的时间等。 如何能够使一个城市到另一个城市的运输时间最短或运 费最省?这就是一个求两座城市间的最短路径问题。 省道(60) 济南 莱芜 泰安 国道(100) 泰莱高速 省道 京福高速(120) 仲宫 省道(50) 问题抽象:在有向网中 A 点(源点)到达 B 点 (终点)的多条路径中,寻找一条各边权值之和最 小的路径,即最短路径。 注 最短路径与最小生成树不同, 路径上不一定包含 n 个顶点, 也不一定包含 n - 1 条边。 省道(50) 济南 莱芜 泰安 国道(100) 泰莱高速 省道 京福高速(120) 仲宫 省道(60) 13 长度 最短路径 (v0, v1) (v0, v2) (v0, v2, v3) (v0, v2, v3, v4) (v0, v2, v3, v4, v5) (v0, v1, v6) 8 13 19 21 20 从 v1 到 v7 的路径: v1、v2、v5、v7:20 v1、v4、v2、v5、v7:14 v1、v2、v7:23 v1、v4、v2、v7:17 v1、v4、v6、v7:24 例: v1 v2 v5 v3 v6 v4 v7 9 15 12 6 4 2 3 8 5 11 16 v5 v1 v6 v4 v3 v2 v0 8
文档评论(0)