最短路径练习.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最短路径练习

最短路径问题与练习 给定带权有向图D和源点V,求V到D中某点的最短路径。 题例 如图为若干城市间道路交通图,其中所标数字表示距离,现要求找出一条从城市①到某城市的最短路径 输入数据 第一行为二个数,N,M(N城市个数,M为城市之间的道路数) 接下来M,每行3个数U、V、W,表示U和V之间的距离 输出数据: 输出最短距离 输入样例 4 4 1 2 3 2 3 4 3 1 2 2 4 5 输出样例 8 Procedure init; Var I,m,u,v:integer; Begin Read(n,m); For u:=1 to n do For v:=1 to n do G[u,v]:=1e100; For i:=1 to m do Read(u,v,g[u,v]); End; 输入:8 11 1 3 800 12 300 2 3 1000 3 4 1200 2 5 1700 4 6 1000 4 8 1500 5 6 1400 5 7 1000 6 7 900 从单源V0求最短路径方法如下:基本思路:把所有结点分为二组 第一组:已算出最短路径的结点; 第二组:未确定最短路径的结点; 按最短路径长度增加的顺序将第二组的结点逐步加入到第一组中,直到所有可达的结点都在第一组中。这里必须满足:V0到第一组的各结点最短路dist=V0到第二组各结点的路径长度。每个结点都有一个距离:第一组中各点的距离值就是V0到各点的最短距离,第二组各点的距离就是由第一组中某点到各点的最短距离。   Dijkstra算法(求出从源点vi到G中其余各顶点的最短路径) Const max=32767; Var G:array[1..20,1..20] of integer; {G为邻接矩阵,t为长度} S,t:array[1..20] of integer; I,m,u,v,k,w:integer; Begin {以下为初始化} Read(n,m); For u:=1 to n do begin t[u]:=max; s[u]:=0; {初始长度为最长,各顶点设为第二组顶点} For v:=1 to n do G[u,v]:=max; For i:=1 to m do begin Read(u,v,g[u,v]);G[v,u]:=G[u,v];end; End; U:=1; s[u]:=1; {u为源顶点, 将该顶点加入到第一组中} for j:=1 to n do {给数组t赋初值} if G[u,j]max then t[j]:=G[u,j]; for k:=1 to n-1 do begin{共进行n-1次循环,每次求出一个顶点的的最短路径} w:=max;u:=0; for j:=1 to n do if(s[j]=0)and(t[j]w) then begin u:=j;w:= t[j]; end;{找距离最小的顶点} if u 0 then begin {u不等于0说明存在一个距离最小的顶点} s[u]:=1 {顶点u加入到第一组中} for j:=1 to n do {所有与m相邻结点的对应t值作修正} if (s[j]=0) and (t[u]+G[u,j] t[j])then t[j]:= t[u]+G[u,j]; end; end;{end K} writeln(t(n); End. 练习 1、写完整最短路径程序:Dijkstra Floyd 2、换车问题 H城是一个旅游胜地,为方便游客,在各个旅游景点及宾馆、饭店等地设置了N个巴士站,并开通了M条一些单向巴士线路。   现在用整数1,2,...,n给H城的所有巴士站编号,约定CUP饭店的巴士站编号为1,S公园巴士站的编号为N。   写一个程序,寻找一个从CUP饭店到S公园的过程中换车的次数最少的乘车方案。 输入输出 输入第一行有两个数字M和N(1=M=100 1N=500),表 示开通了M条单程巴士线路,总共有N个车站。从第二行到第M行依次给出了第1条到 第M条巴士线路的信息。其中第i+1行给出的是第i条巴士线路的信息,从左至右按运行顺序依次给出了该线路上的所有站号相邻两个站号之间用一个空格隔开。 输出只有一行。如果无法乘巴士从饭店到达S公园,则输出 N0,否则输出你的程序所找到的最少换车次数,换车次数为0表示不需换车即可到达· 样例 输入 3 7 6 7 4 7 3 6 2 1 3 5 输出 2 图的建立与邻接矩阵输出 var i,j,k,p,n,m:integer; x:array[1..100] of integer; g:array[1..100,1..100

文档评论(0)

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

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档