第九章图与网络 算法思路 若P=u.vU是从到的最短路,则P=1…u…v必然为到v的最 短路(若(v吧)≠0,则W(P)<W(P).否则若P"为至v的最短路,W(Pm)<W(P), 则由P”和边叫,构成一条至的长度小于P的路径这与P为至巴的最短路 矛盾.如图917所示,假定1吃路4是防至4的最短路,则物2一定是至吃的最 短路,这是因为,货间如果还有更短的路,如吃,则防购必为至4间的比 234更短的路,这与假设矛盾. 图917 因此得出寻找指定两点间最短路的方法是:由起点出发,逐步比较到附近各点所有可 能路的长短,从而求出从起点到其它各点的最短路线及其长度先给图G的每个顶点记一 个数(称为标号)临时标号(简称T标号)或者固定标号(简称P标号).T标号表示从起点 到这一点的最短路长度的上界,P标号则是从起点到这一点的最短路长.每一步把某个点 的T标号改变为P标号,已得P标号的点不再改变其标号,这样,一且终点得到P标 号算法停止 算法步骤 用表示图中两点与巧之间的距高,若,与吗之间没有连线,令=+,(在 实际计算中,可用任一足够大的数代替).显然可令图中每个顶点:=0. 第一步:给起点标上固定的标号P()=0,并打上“*”号.给其它各点标上临时 标号,如起点到该点有边直接相连,就标T(心)=,否则T()=+∞.在编制计算机程 序时,也可以把其它各点都标上T标号为T)=+,0=2,3,n).并在T标号后面 注明从那一点来 第二步:在所有T标号中选取最小的,将其改为P标号(钉 ),并重新计算 有T标号的其它各点的T标号.计算的方法是:设顶点是刚得到P标号的点.把与顶 点有边直接相连而又属于T标号的各顶点的标号,改为下列T标号: T(vj)=min{T(vj),P(vi)+wij} 第三步:重复第二步,直至所有的顶点得到P标号止.然后从各个顶点反向追踪到起 点,这样就可以找出最短路,从各个顶点的P标号可以看出起点到该点的最短距离 至此,我们求出起点至终点包括中间各个顶点的最短路及其长度. 例4.求图9-15中1至其它各点的最短路长度. 解用Dijkstra算法迭代过程如图9-18所示
6 ⑥✌⑦✌⑧⑩⑨✘❶✖❷✘❸ ❹✌❺✌❻✌❼: ❽ P = v1 . . . u . . . vvj ❉✂✞ v1 ✡ vj õ✭✂✮❹ø, ❾ P 0 = v1 . . . u . . . v ✍✂❿✻ v1 ✡ v õ✭ ✮❹ø (❽ w(vvj ) 6= 0, ❾ W(P 0 ) < W(P)). ➀✂❾❽ P 00 ✻ v1 ➁ v õ✭✂✮❹ø,W(P 00) < W(P), ❾ r P 00 ❘✙ vvj ➂✌➃❳✌➄ v1 ➁ vj õ✫✌✬✌➅✌s P õø✌➆, ➇✌➈ P ✻ v1 ➁ vj õ✭✌✮✟ø ➉✌➊. ✁✌✑ 9–17 ✒ ✢ , ➋✌✔ v1v2v3v4 ❉ v1 ➁ v4 õ✭✌✮✟ø, ❾ v1v2v3 ❳✌✔❉ v1 ➁ v3 õ✭ ✮✁ø. ➇ ❉✤➌✤✻ v1,v3 ✥✁✤➍✤➎▲✁û✮ õø, ✁ v1v5v3, ❾ v1v5v3v4 ✍ ✻ v1 ➁ v4 ✥✁õ➐➏ v1v2v3v4 û ✮ õø, ➇✌➈✌➋✝➉✌➊. ✑ 9–17 ➌✌➑②✌❇✌➒✌➓✌➔✌✔✣✌✠✌✥✭✌✮✟øõ✌✯✌✐✌❉: r✘→✌✠❇✌➣, ↔✌↕ ➏✘➙✡✌➛✌➜✗ ✠✒ ▲❄ ➝ø õ✫✂✮, ✞✂➞☞✂❇ ✞✂→✂✠✡✂❊✂❋✗ ✠❹õ✭✂✮✟ø✟÷✂➟❊✫✌✬. ➠✂➡✂✑ G õ✂➢✂❂✂➤✂✠✂➥❳ ❂✌✛ (● ✻✌➦✌➧) ➨✌➩➦✌➧ (➫✌● T ➦✌➧) ✪✌➭✖➯✔ ➦✌➧ (➫✌● P ➦✌➧).T ➦✌➧✌✜✌✢✌✞✌→✌✠ ✡➇✌❳✠✟õ✭✌✮✟ø✌✫✌✬õ✌❀✌➲,P ➦✌➧❾❉✌✞✌→✌✠✡➇✌❳✠✟õ✭✌✮✟ø✌✫. ➢ ❳✌↕✵✌➳❂✌✠ õ T ➦✌➧✌➵✌➸✌✻ P ➦✌➧, ➺✘② P ➦✌➧✟õ✌✠✈✌➻➵✌➸❊ ➦✌➧, ➇✌➼, ❳✌➽✌➾✠ vn ②✡ P ➦ ➧ , ❤✌✐✌➚✌➪. ❹✌❺✌➶✌➹: ❯ wij ✜✂✢✑◆✕✣✂✠ vi ➈ vj ❍ ✥❹õ✦✂✧, ❽ vi ➈ vj ❍ ✥✂➘✂▲✂➴÷, ➷ wij = +∞,(☎ ③✌④✌➬✌❤ ✕, ❄ ❯✌➮❳✌➱✌✃✌❐õ✌✛✌❒✌❮). ❰✌❿✌❄✌➷✌✑✖✕➢✌❂✌➤✌✠ wii = 0. Ï✌Ð✌➶: ➡ →✌✠ v1 ➦✌❀ ➯✔ õ✌➦✌➧ P(v1) = 0, Ñ✌Ò❀ “∗” ➧ . ➡❊✌❋✗ ✠✌➦✌❀➨✌➩ ➦✌➧, ✁→✌✠✡✌Ó✠✌▲✙✌Ô✌Õ✌Ö➴ , × ➦ T(vj ) = w1j , ➀✌❾ T(vj ) = +∞. ☎✌Ø✌Ù➬✌❤✌Ú✌Û Ü➩, Ý✌❄✌❅ ✵✌❊✌❋✗ ✠✌❈✌➦✌❀ T ➦✌➧✌✻ T(vj ) = +∞,(j = 2, 3, . . . , n). Ñ✌☎ T ➦✌➧①✌Þ ß✖à✞✌á❳ ✠✌â. Ï✌ã✌➶: ☎✌✒▲ T ➦✌➧ ✕✘★✌ä✌✭✌➅õ , ✾✌❊➵✌✻ P ➦✌➧ (Ò ❀ “*” ➧ ) , Ñ✌åü✌➬✌❤ ▲ T ➦✌➧✌æ❊✌❋✗ ✠✌æ T ➦✌➧. ➬✌❤✌æ✌✯✌✐✌❉: ✝✌➤✌✠ vi ❉✌ç②✡ P ➦✌➧✌æ✌✠. ✵➈ ➤ ✠ vi ▲✙✌Ô✌Õ✌Ö➴✌➞✱✌è✌s T ➦✌➧✌æ✗ ➤✌✠ vj æ✌➦✌➧, ➵✌✻✌é✌ê T ➦✌➧: T(vj ) = min{T(vj ), P(vi) + wij}. Ï✌ë✌➶: å✌ì✌í✌î✌↕, Ô➁✒ ▲✌æ✌➤✌✠②✡ P ➦✌➧✌➪. ❿✌①✞ ✗ ❂✌➤✌✠✌ï✖▼✘ð✌ñ✡→ ✠ , ➇✌➼✌×✌❄✌❅✌➓✌❇✌✭✌✮✟ø, ✞ ✗ ❂✌➤✌✠✌æ P ➦✌➧❄✌❅✌❆✌❇ →✌✠✡✌Ó✠✌æ✭✌✮✦✌✧. ➁➑ , ò■☞✌❇ →✌✠ v1 ➁➾ ✠ vn ó✌ô ✕✥✗ ❂✌➤✌✠✌æ✭✌✮✟ø✌➟❊✫✌✬. õ 4. ☞✌✑ 9–15 ✕ v1 ➁✌❊✌❋✗ ✠✌æ✭✌✮✟ø✌✫✌✬. ö : ❯ Dijkstra ❤✌✐✌÷✌❒✌ø✌Û✁✌✑ 9–18 ✒ ✢
59.2最短路问题 7 为了方便起见。我们用k表示计算步骤,将上述每步计算所得信息汇集在一起,即得
§9.2 ù✌ú✌û✖ü✘ý 7 (a) (b) (c) (d) (e) (f) (g) ✑ 9–18 ✻✌þ✌✯✌ÿ✌→✁, ò■ ❯ k ✜✌✢✌➬✌❤↕✁✂, ✾ ❀✌❁✌➢↕➬✌❤✒✌②✁✄✁☎✝✆✁✞✤☎✌❳→ , ✟✌②
8 第九章图与网络 如下运算矩阵, T() 0° +o +∞ 15 +0 +0 10 135 + 15 436 > 3 从而P()=0,P(2)=10,P(w)=11,P(a)=8,P()=15,Pw)=13,P() 35. 例5.求图9-19中m至w的最短路及其长度 图9-19 解我们仅列出运算矩阵: T(v;) U6 + + + 11 21 十0 21 A2 42 + + + 45 4 42 +0 + 6 6* + 756 10 由矩阵知:P(%)=10,它由产生;P()=7,它由或%产生:若P()由%产 生,P(=4,它由2产生:P(2)=1.它由产生:若P()由%产生,P=6,它由
8 ⑥✌⑦✌⑧⑩⑨✘❶✖❷✘❸ ✁é✁✠✌❤✁✡✁☛. vj T(vj ) v1 v2 v3 v4 v5 v6 v7 k 1 0 ∗ +∞ +∞ +∞ +∞ +∞ +∞ 2 101 151 8 ∗ 1 +∞ +∞ +∞ 3 10∗ 1 114 +∞ 134 +∞ 4 11∗ 4 162 134 +∞ 5 162 13∗ 3,4 +∞ 6 15∗ 6 436 7 35∗ 5 ✞✌➞ P(v1) = 0,P(v2) = 10, P(v3) = 11,P(v4) = 8, P(v5) = 15, P(v6) = 13, P(v7) = 35. õ 5. ☞✌✑ 9–19 ✕ v1 ➁ v8 æ✭✌✮✟ø✌➟❊✫✌✬. ✑ 9–19 ö : ò■✌✇ê ❇ ✠✌❤✁✡✁☛: vj T(vj ) v1 v2 v3 v4 v5 v6 v7 v8 k 1 0 ∗ +∞ +∞ +∞ +∞ +∞ +∞ +∞ 2 1 ∗ 1 21 +∞ +∞ +∞ +∞ +∞ 3 2 ∗ 1 42 42 +∞ +∞ +∞ 4 4 ∗ 2 42 +∞ 103 +∞ 5 4 ∗ 2 64 84 +∞ 6 6 ∗ 4 75 +∞ 7 7 ∗ 5,6 116 8 10∗ 7 r☞✡✁☛✁✌:P(v8) = 10, ❋ r v7 ✴✁✍; P(v7) = 7, ❋ r v5 ✪ v6 ✴✁✍; ❽ P(v7) r v5 ✴ ✍ ,P(v5) = 4, ❋ r v2 ✴✁✍;P(v2) = 1. ❋ r v1 ✴✁✍; ❽ P(v7) r v6 ✴✁✍,P(v6) = 6, ❋ r
59.2最短路问 9 4产必P)=4它由2产必P)=L它由n产必故至的最短路有两条 P=功257g; P登=t2467g, 长度为10 修预菊产法色中女的洗肉来“多 向造通的有向边数它们的权都为uO,即ua,g)=r,)=o, 以上两个例题 表示明了这一点 两、应距选例 例6.设备更新问题 某工厂或用一长设备每年年度该厂所对该设备的更新与否最出根」 若又屋新设 各.就要支 之在的有制宽个若干年之的设备理 :若继续或用日设各,则所支 ,定的维修 经各或用的年数 为长,每年所所的维修 或一这长设备的“新设备入置和旧设备赁 用最小.我们以一个五年之将设 备更新的计上为例,若已知该设备在五年将 的看如表91所示 表9-1 第4年☐123T 45 1111121213 还已知设备或用不您年数的维修把如表9-2所示 表92 或用是年 0,1(1,223(3,4(45 维修: b 5 6811 18 把解可其选择的设备更新方案显然是很多的.例如每年都又置一新设备,则其又置 为11+11+12电12+13=59,而每年支的维修为5,五年它计5×5=25.所以 变这一方案下, 讲一 用为36季27=68, 那么,如何制定或得 题,建立网络模和如图g2 把用最小的设备更新计上有可以把这个问题前化为最短路问
§9.2 ù✌ú✌û✖ü✘ý 9 v4 ✴✁✍;P(v4) = 4, ❋ r v2 ✴✁✍; P(v2) = 1, ❋ r v1 ✴✁✍. ✎ v1 ➁ v8 æ✭✌✮✟ø▲✌✣➄: P ∗ 1 = v1v2v5v7v8; P ∗ 2 = v1v2v4v6v7v8, ✫✌✬✻ 10. ➇✑✏✂➎✑✒✂➔✂❇,Dijkstra ❤✂✐✂✼✑✓✑✔✑✕✂✚✂▲◆▼✑ ❘✂❙◆▼✑❈✑✖✂❯. ✼✂❙◆▼✑â✑✗✾➴ Õ ➤✂✠✂æ✗✂✙✑✘✻✑✙◆▼◗➴✑✚✂æ✂▲◆▼✙, ✛❋✂■æ✂✚✂❈✂✻ w(e), ✟ w(vi , vj ) = w(vj , vi) = w(e). ❅ ❀✌✣✌❂þ ➺☞✜✁✢ àþ➇✌❳✠ . ✣❩✥✤✧✦✧★✧✩ õ 6. ✝✟ú✟û✟ü✟ý✟þ. ➳✹✤✺✝✪❯❳✝✫✝✁ú, ➢ t✤t✝✬Ó✺✝✒✼Ó ✝✁ú✤æ✁û✁ü➈✤➀✝✭❇✝✮✰✯. ❽✝✱✝✲ü✤✝ ú , ×✌✆✁✳✁✴✌❳✌✔æ✱✁✲✁✵; ❽✁✶✁✷✪ ❯✁✸✌✝✟ú, ❾✁✒✁✳✁✴✌❳✌✔æ✁✹✁✺✵ , ✝✟ú✪ ❯✌æt✛ ✻ ✫, ➢ t✂✒✑✒æ✑✹✑✺✵× ✻✂❦, ✄✂☎æ❹ý❹þ✂❉✁✑✼✂Ù✂✔✂❳❂❽✁✽t✌❍✿✾æ✂✝✟ú❹û✟ü✂➬✁❀, ✪✌❳✁❁✌➇✁✫✝✟ú✌æ “ü✌✝✟ú✱✁✲✁✵❘✁✸✌✝✟ú✁✹✁✺✵ ” ❂✵❯✭✌➅. ò■❅✌❳❂✁❃t✌❍❄✾✝ ú✟û✟ü✌æ✌➬✁❀✌✻, ❽ ➺✌Ó ✝✟ú☎❃ t❄✾✱✁❅æ✁❆✁❇✁✜ 9–1 ✒ ✢ :✜ 9–1 í i t 1 2 3 4 5 ✱❆ ci 11 11 12 12 13 ➎✖➺✌✌✝✟ú✪ ❯✈✁❈t✛✌æ✁✹✁✺✵ ✁✜ 9–2 ✒ ✢ : ✜ 9–2 ✪ ❯✁❉t (0,1] (1,2] (2,3] (3,4] (4,5] ✹✁✺✵ bi b1 b2 b3 b4 b5 5 6 8 11 18 ö : ❄✁❊✌★✌✩æ✌✝✟ú✟û✟ü✌✯✌✰❰✌❿❉✌❥✌❦✌æ. ✌✁, ➢ t ❈✱✁✲❳✁❁ü✌✝✟ú, ❾❊ ✱✁✲ ✵✻ 11 + 11 + 12 + 12 + 13 = 59, ➞✌➢t✁✳✁✴æ✁✹✁✺✵✻ 5, ❃ t✁❋➬✌✻ 5 × 5 = 25. ✒✌❅ ☎✌➇✌❳✯✌✰✌é, ❂✵❯✌✻ 59 + 25 = 84. ❽✁●ä✁❍✌❳✯✌✰, ✁✌☎✌í✌❳✌t, í✁■✌t❘í❃ t✌✗ ✱✁❏❳✁❁ü✌✝✟ú, ✱✁✲✁✵✻ 11 + 12 + 13 = 36, ✹✁✺✵✻ 5 + 6 + 5 + 6 + 5 = 27, ❃ t✁❂✵ ❯✌✻ 36 + 27 = 63. á✑❑, ✁✑✼✂Ù✂✔✑✪✂②✑❂✵❯✭✌➅æ✌✝✟ú❹û✟ü✌➬✑❀✁▲? ❄✂❅✵➇ ❂❹ý❹þ✑▼✑◆✂✻✭✌✮❹øý þ , ❖✁P ❖✘P✁◗✁❘✁✌✑ 9–20:
10 第九章图与网络 图9-20 设顶点1,,%表示各年年初,%相当于第五年末边(,)表示在第i年年初购 买一台设备一直使用到第j年年初(即使用了j-i年). 每条边的通,)据已知资之可按下式计算: w(4,)一第i年设备购置费+(行-)年里的设备维修费 9+6+b2++- 6=1,,5j=2,6,i< 例如,(2,%)是第3年年初购买一台新设备,使用至第5年年底。支付购置费12,由 这样,制定一个最优的设备更新计划的问题就等价于寻求到的最短路问题 用Dijkstra算法可得运算矩阵如下 T(vj) 0 +o + +00 3 16 221 301 411 22 30 41 57 4 301 411 53 5 41i 533.4 6 最短路有两条, 一条是P 1购,即第1,3年初各购置 台新设备,五年的总费用 为53:另一条是P=146,即第1,4年初各购置一台新设备,五年的总费用为53. %拉合建一置文 ,各点间的距离图9-21所示.问 ,干设在那个点可使最大运输距离为鳗攀修若子知处置产量0电处 0是老动克处”电,处0电处侧吃问置目唯移于设在可个点才能想 吨公里数最小?
10 ⑥✌⑦✌⑧⑩⑨✘❶✖❷✘❸ ✑ 9–20 ✝✌➤✌✠ v1, . . . , v6 ✜✌✢✗✌t✌t✁✬,v6 Ö✁❙✌s✌í❃ t✁❚. ✙ (vi , vj ) ✜✌✢☎✌í i t✌t✁✬✱ ❅❳✁❁✝✟ú❳✌Ô✁✪❯✡í j t✌t✁✬ (✟✁✪❯✌þ j − i t). ➢ ➄✌✙æ✌✚ w(vi , vj ) ❯✖➺✌✁❱✌✳❄✁❲é✁❳✌➬✌❤: w(vi , vj ) = í i t ✝✟ú✱✁✲✁✵ +(j − i) t✁✏æ✌✝✟ú✁✹✁✺✵ = ci + (b1 + b2 + . . . + bj−i), (i = 1, . . . , 5; j = 2, . . . , 6,i < j). ✤✁,(v3, v6) ❉ í 3 t✤t✝✬✱✝❅❳✝❁ ü✤✝✁ú, ✪ ❯➁í 5 t✤t✝❨, ✳✝✴✱✝✲✝✵ 12, r s✁✒✁✪❯ 3 t, ✎ ✹✁✺✵✻ 5+6+8=19, s❉✙ (v3, v6) ❀✌æ✌✚ w(v3, v6) = 31. ❰✤❿, ✼ s➢ ❳✝✫✤❄➝✤æ✤✝✁ú✁û✁ü✤✯✤✰, ☎ ➑ ✑➐✕❈✤▲Ö✽✤æ❳✤➄✞ v1 ✡ v6 æø. ➇✌➼, Ù✌✔✌❳❂ ✭✁❩æ✌✝✟ú✟û✟ü✌➬✁❀✌æ✟ý✟þ× ÿ✁❆s✌➒✌☞ v1 ✡ v6 æ✭✌✮✟øý✟þ. ❯ Dijkstra ❤✌✐❄✌②✠✌❤✁✡✁☛✁é : vj T(vj ) v1 v2 v3 v4 v5 v6 k 1 0 ∗ +∞ +∞ +∞ +∞ +∞ 2 16∗ 1 221 301 411 591 3 22∗ 1 301 411 572 4 30∗ 1 411 533 5 41∗ 1 533,4 6 53∗ 3,4 ✭✌✮✟ø▲✌✣➄, ❳✌➄❉ P ∗ 1 = v1v3v6, ✟✌í 1,3 t✁✬✌✗✱✁✲❳✁❁ü✌✝✟ú, ❃ t æ ❂✵❯ ✻ 53; ❍✌❳✌➄❉ P ∗ 2 = v1v4v6, ✟✌í 1,4 t✁✬✌✗✱✁✲❳✁❁ü✌✝✟ú, ❃ t æ ❂✵❯✌✻ 53. õ 7. ★✁❬ý✟þ. ▲✑❭✂❂✂✲✂✳✂✴✂✟:v1, v2, . . . , v6, ❪✑❋✑❖✂❳✲✂✳✸✂✹✂✺, ✗ ✠✂✥✂æ✦✂✧✁✂✑ 9-21 ✒ ✢ . ý ✲✌✳✸✌✹✌✺✽✌✝☎✁❫❂✌✠, ❄✁✪✌✭✌❐✠✁❴✦✌✧✻✭✌➅? ❽ ➺✌ v1 ❵ ✲✌✳✌✴✁❛ 50 ❜,v2 ❵ 40 ❜,v3 ❵ 60 ❜,v4 ❵ 20 ❜, v5 ❵ 70 ❜,v6 ❵ 90 ❜, ý✌✲✌✳✸✌✹✌✺✽✌✝☎✁❫❂✌✠, ❝ ➝ ❂ ❜✌♦✁✏✛ ✭✌➅?