设计公共汽车线路3试题解析.docxVIP

  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文档。上传文档
查看更多

【题21】设计公共汽车线路(3)

现有一张县城的城镇地图,图中的顶点为城镇,无向边代表两个城镇间的连通关系,边上的权为公路

造价,县城所在的城镇为v。由于该县的经济比较落后,因此公路建设只能从县城开始规划。规划的要求

0

是所有可达县城的城镇必须建设一条通往县城的汽车线路,该线路的工程的总造价必须最少。

输入:

n (城市数,1≤n≤20)

县城所在的城镇序号v

0

e (有向边数1≤e≤210)

以下e行,每行为3个整数,两个城镇的序号和它们间的公路造价

输出:

k行,每行为一条通往县城的汽车线路的总造价和该条线路途径的城镇序号

分析:

设G=(V,E)是一个有向图,它的每一条边(U,V)∈E都有一个权W(U,V),在G中指定一

个结点V

,要求把从V到G的每一个结点V(V∈V)的最短有向路找出来(或者指出不存在从V到V

0 0 j J 0 j

的有向路,即V不可达V)。这个问题即为单源最短路问题。解决单源最短路径的基本思想是把图中所有

0 j

结点分为两组,每一个结点对应一个距离值

第一组:包括已确定最短路径的结点,结点对应的距离值是由v到此结点的最短路径长度;

0

第二组:包括尚未确定最短路径的结点,结点对应的距离值是v经由第一组结点(中间结点)至

0

此结点的最短路径长度;

我们按最短路径长度递增的顺序把第二组的结点加到第一组中去,直至v 可达的所有结点都包含于第一

0

组。在这个过程中,总保持从v到第一组各结点的最短路径长度都不大于从v至第二组任何结点的路径

0 0

长度。具体作法是:

初始时v进入第一组,v的距离值为0;第二组包含其它所有结点,这些结点对应的距离值这样确定

0 0

(设v为第二组中的结点)

i

?w (v,v)?E

dist ?? 0i 0 i

i ??

(v,v

0 i

)?E

然后每次从第二组的结点中选一个其距离值为最小的结点v 加到第一组中。每往第一组加入一个结点v,

m m

就要对第二组的各结点的距离值作一次修正(设v为第二组的结点):

i

若加进v

做中间结点使得v至v的路径长度更短(即v的距离值v 的距离值+W ),则要修改v

m 0 i i m mi i

的距离(v

i

的距离值←v

m

的距离值+W

)。修改后再选距离值最小的一个结点加入到第一组中,…。如此

mi

进行下去,直至第一组囊括图的所有结点或再无可加入第一组的结点存在。显然,这种从第二组的结点中

选距离值最小的结点扩展是一种贪心策略。下面,我们来证明这个算法:

由于初始时对两个组的划分及各结点距离值的确定符合上述基本思想,因此要证明算法正确性,关键是证明每次往第一组加入结点v 后,其两个组的划分及结点距离值仍然符合要求。也就是要证明第二组

m

中距离值最小的结点v,其距离值为v到v 的最短路径长度,且该路径长度在v

至第二组结点的所有路

m 0 m 0

径中最短的。我们来证明这两点:

⑴若v

m

的距离值不是从v

0

到v 的最短路径长度,另有一条v

m 0

经由第二组某些结点(其中第一个结

点设为v)到达v 的路径,其长度比v 的距离值更小,即

s m m

v的距离值v经由v到v 的最短路径长度v 的距离值

s 0 s m m

与v 是第二组中距离值最小的结点矛盾。所以v 的距离值就是从v到v 的最短路径长度。

m m 0 m

⑵设v是第二组中除v 外的任何其它结点。若v至v的最短路径上的中间结点为第一组的结点,由

x m 0 x

距离值的定义可知,其路径长度势必大于等于v至v 的最短路径长度;若v至v的最短路径不仅包含第

0 m 0 x

一组的结点为中间结点。设路径上第一个在第二组的中间结点为v,则v至v的路径长度就是v

的距离

y 0 y y

值,已大于等于v

0

至v 的最短路径长度,那么v

m 0

到v的最短路径长度当然也不会小于v

x 0

到v 的最短路

m

径长度了,所以v0到vm的路径长度在v0至第二组结点的所有路径中是最短的。设

n—图的结点数;adj—有向图的相邻矩阵。其中

dist—最短路径集合。其中

dist[i].pre—在v至v的最短路径上,v的前趋结点序号;

0 i i

dist[i].length—v至v的最短路径长度,即v的距离值;

0 I i

(1≤i≤n)

Constn=图的结点数;Type

path=record {路径集合的结点类型}

length:real; {距

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

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

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档