8.6 恷玉揃抄!貫匯倖坿泣欺凪万光泣議恷玉揃抄
恷玉揃抄諒籾頁夕議嗽匯倖曳熟灸侏議哘喘諒籾。箭泌?蝶匯仇曝議匯倖巷揃利?公協阻乎利坪議n 倖廓偏參式宸乂廓偏岻寂議屢宥巷揃議鉦宣?嬬倦孀欺廓偏A 欺廓偏B 岻寂匯訳訟箭恷除議宥揃椿?泌惚繍廓偏喘泣燕幣?廓偏寂議巷揃喘円燕幣?巷揃議海業恬葎円議幡峙?椎担?宸倖諒籾祥辛拷潤葎壓利夕嶄?箔泣A 欺泣B 議侭嗤揃抄嶄?円議幡峙岻才恷玉議椎匯訳揃抄。宸訳揃抄祥頁曾泣岻寂議恷玉揃抄?旺各揃抄貧議及匯倖競泣葎坿泣?Sourse??恷朔匯倖競泣葎嶮泣?Destination?。壓掲利夕嶄?恷玉揃抄頁峺曾泣岻寂将煽議円方恷富議揃抄。和中網胎曾嶽恷械需議恷玉揃抄諒籾。
云准枠栖網胎汽坿泣議恷玉揃抄諒籾?公協揮幡嗤?夕G??V?E?才坿泣v∈V?箔貫v 欺G 嶄凪噫光競泣議恷玉揃抄。壓和中議網胎嶄邪譜坿泣葎v0。
和中祥初府盾畳宸匯諒籾議麻隈。軸喇杵旬帽蒙性?Dijkstra?戻竃議匯倖梓揃抄海業弓奐議肝會恢伏恷玉揃抄議麻隈。乎麻隈議児云房?頁?譜崔曾倖競泣議鹿栽S 才T?V?S?鹿栽S 嶄贋慧厮孀欺恷玉揃抄議競泣?鹿栽T 贋慧輝念珊隆孀欺恷玉揃抄議競泣。
兜兵彜蓑扮?鹿栽S 嶄峪淫根坿泣v0?隼朔音僅貫鹿栽T 嶄僉函欺競泣v0 揃抄海業恷玉議競泣u 紗秘欺鹿栽S 嶄?鹿栽S 耽紗秘匯倖仟議競泣u?脅勣俐個競泣v0 欺鹿栽T 嶄複噫競泣議恷玉揃抄海業峙?鹿栽T 嶄光競泣仟議恷玉揃抄海業峙葎圻栖議恷玉揃抄海業峙嚥競泣u 議恷玉揃抄海業峙紗貧u 欺乎競泣議揃抄海業峙嶄議熟弌峙。緩狛殻音僅嶷鹸?岷欺鹿栽T 議競泣畠何紗秘欺S 嶄葎峭。
Dijkstra 麻隈議屎鳩來辛參喘郡屬隈紗參屬苧。邪譜和匯訳恷玉揃抄議嶮泣葎x?椎担?乎揃抄駅隼賜宀頁察?v0?x??賜宀頁嶄寂峪将狛鹿栽S 嶄議競泣遇欺器競泣x 議揃抄。
咀葎邪飛緩揃抄貧茅x 岻翌嗤匯倖賜匯倖參貧議競泣音壓鹿栽S 嶄?椎担駅隼贋壓総翌議嶮泣音壓S 嶄遇揃抄海業曳緩揃抄珊玉議揃抄?宸嚥厘断梓揃抄海業弓奐議乏會恢伏恷玉揃抄議念戻屢狸芹?侭參緩邪譜音撹羨。
和中初府Dijkstra 麻隈議糞孖。
遍枠?哈序匯倖絹廁?楚D?万議耽倖蛍楚D[i] 燕幣輝念侭孀欺議貫兵泣v 欺耽倖嶮泣vi 議恷玉揃抄議海業。万議兜蓑葎?飛貫v 欺vi 嗤察?夸D[i]葎察貧議幡峙?倦夸崔D[i]葎∞。?堡撮?ざ販Ł?
椎担?和匯訳海業肝玉議恷玉頁陳匯訳椿?邪譜乎肝玉揃抄議嶮泣頁vk ?夸辛?遇岑?宸訳揃抄賜宀頁?v, vk??賜宀頁?v, vj, vk?。万議海業賜宀頁貫v 欺vk 議察貧議幡峙?賜宀頁D[j]才貫vj 欺vk 議察貧議幡峙岻才。
卆象念中初府議麻隈房??壓匯違秤趨和?和匯訳海業肝玉議恷玉揃抄議海業駅頁?
功象參貧蛍裂?辛參誼欺泌和宙峰議麻隈?
?1?邪譜喘揮幡議惣俊裳專edges 栖燕幣揮幡嗤?夕?edges[i][j] 燕幣察ヾvi, vjゝ貧議幡峙。飛ヾvi, vjゝ音贋壓?夸崔edges[i][j]葎∞?壓柴麻字貧辛喘塋俯議恷寄峙旗紋?。S 葎厮孀欺貫v 竃窟議恷玉揃抄議嶮泣議鹿栽?万議兜兵彜蓑葎腎鹿。椎担?貫v 竃窟欺夕貧凪噫光競泣?嶮泣?vi 辛嬬器欺恷玉揃抄海業議兜峙葎?
麻隈8.17 葎喘C 囂冱宙峰議Dijkstra 麻隈。
void ShortestPath_1(Mgraph G,int v0,PathMatrix *p, ShortPathTable *D)
{ /*喘Dijkstra 麻隈箔嗤?利G 議v0 競泣欺凪噫競泣v 議恷玉揃抄P[v]式凪揃抄海業D[v]*/
/*飛P[v][w]葎TRUE?夸w 頁貫v0 欺v 輝念箔誼恷玉揃抄貧議競泣*/
/*final[v] 葎TRUE 輝拝叙輝v∈S, ?軸厮将箔誼貫v0 欺v 議恷玉揃抄*/
/*械楚INFINITY 葎円貧幡峙辛嬬議恷寄峙*/
for (v=0;v<G.vexnum;++v)
{fianl[v]=FALSE; D[v]=G.edges[v0][v];
for (w=0; w<G.vexnum; ++w) P[v][w]=FALSE; /*譜腎揃抄*/
if (D[v]<INFINITY) {P[v][v0]=TRUE; P[v][w]=TRUE;}
}
D[v0]=0; final[v0]=TRUE? /*兜兵晒?v0 競泣奉噐S 鹿*/
/*蝕兵麼儉桟?耽肝箔誼v0 欺蝶倖v 競泣議恷玉揃抄?旺紗v 欺鹿*/
for(i=1; i<G.vexnum; ++i) /*凪噫G.vexnum-1 倖競泣*/
{min=INFINITY; /*min 葎輝念侭岑宣v0 競泣議恷除鉦宣*/
for (w=0;w<G.vexnum;++w)
if (!final[w]) /*w 競泣壓V?S 嶄*/
if (D[w]<min) {v=w; min=D[w];}
final[v]=TRUE /*宣v0 競泣恷除議v 紗秘S 鹿栽*/
for(w=0;w>G.vexnum;++w) /*厚仟輝念恷玉揃抄*/
if (!final[w]&&(min+G.edges[v][w]<D[w])) /*俐個D[w]才P[w],w∈V-S*/
{ D[w]=min+G.edges[v][w];
P[w]=P[v]; P[w][v]=TRUE; /*P[w]=P[v]+P[w]*/
}
}
}/*ShortestPath._1*/
麻隈8.17
箭泌?夕8.26 侭幣匯倖嗤?利夕G8 議揮幡惣俊裳專葎?
和中蛍裂匯和宸倖麻隈議塰佩扮寂。及匯倖for 儉桟議扮寂鹸墫業頁O(n)?及屈倖for儉桟慌序佩n-1 肝?耽肝峇佩議扮寂頁O(n)。侭參悳頁議扮寂鹸墫業頁O(n2)。泌惚喘揮幡議惣俊燕恬葎嗤?夕議贋刈潤更?夸埋隼俐個D 議扮寂辛參受富?徽喇噐壓D ?楚嶄僉夲恷弌議蛍楚議扮寂音延?侭參悳議扮寂挽葎O(n2)。
泌惚峪錬李孀欺貫坿泣欺蝶匯倖蒙協議嶮泣議恷玉揃抄?徽頁?貫貧中厘断箔恷玉揃抄議圻尖栖心?宸倖諒籾才箔坿泣欺凪万侭嗤競泣議恷玉揃抄匯劔鹸墫?凪扮寂鹸墫業匆頁O(n2)。
云准枠栖網胎汽坿泣議恷玉揃抄諒籾?公協揮幡嗤?夕G??V?E?才坿泣v∈V?箔貫v 欺G 嶄凪噫光競泣議恷玉揃抄。壓和中議網胎嶄邪譜坿泣葎v0。
和中祥初府盾畳宸匯諒籾議麻隈。軸喇杵旬帽蒙性?Dijkstra?戻竃議匯倖梓揃抄海業弓奐議肝會恢伏恷玉揃抄議麻隈。乎麻隈議児云房?頁?譜崔曾倖競泣議鹿栽S 才T?V?S?鹿栽S 嶄贋慧厮孀欺恷玉揃抄議競泣?鹿栽T 贋慧輝念珊隆孀欺恷玉揃抄議競泣。
兜兵彜蓑扮?鹿栽S 嶄峪淫根坿泣v0?隼朔音僅貫鹿栽T 嶄僉函欺競泣v0 揃抄海業恷玉議競泣u 紗秘欺鹿栽S 嶄?鹿栽S 耽紗秘匯倖仟議競泣u?脅勣俐個競泣v0 欺鹿栽T 嶄複噫競泣議恷玉揃抄海業峙?鹿栽T 嶄光競泣仟議恷玉揃抄海業峙葎圻栖議恷玉揃抄海業峙嚥競泣u 議恷玉揃抄海業峙紗貧u 欺乎競泣議揃抄海業峙嶄議熟弌峙。緩狛殻音僅嶷鹸?岷欺鹿栽T 議競泣畠何紗秘欺S 嶄葎峭。
Dijkstra 麻隈議屎鳩來辛參喘郡屬隈紗參屬苧。邪譜和匯訳恷玉揃抄議嶮泣葎x?椎担?乎揃抄駅隼賜宀頁察?v0?x??賜宀頁嶄寂峪将狛鹿栽S 嶄議競泣遇欺器競泣x 議揃抄。
咀葎邪飛緩揃抄貧茅x 岻翌嗤匯倖賜匯倖參貧議競泣音壓鹿栽S 嶄?椎担駅隼贋壓総翌議嶮泣音壓S 嶄遇揃抄海業曳緩揃抄珊玉議揃抄?宸嚥厘断梓揃抄海業弓奐議乏會恢伏恷玉揃抄議念戻屢狸芹?侭參緩邪譜音撹羨。
和中初府Dijkstra 麻隈議糞孖。
遍枠?哈序匯倖絹廁?楚D?万議耽倖蛍楚D[i] 燕幣輝念侭孀欺議貫兵泣v 欺耽倖嶮泣vi 議恷玉揃抄議海業。万議兜蓑葎?飛貫v 欺vi 嗤察?夸D[i]葎察貧議幡峙?倦夸崔D[i]葎∞。?堡撮?ざ販Ł?
D[j]=Min{D[i]| vi∈V}
議揃抄祥頁貫v 竃窟議海業恷玉議匯訳恷玉揃抄。緩揃抄葎?v ,vj?。椎担?和匯訳海業肝玉議恷玉頁陳匯訳椿?邪譜乎肝玉揃抄議嶮泣頁vk ?夸辛?遇岑?宸訳揃抄賜宀頁?v, vk??賜宀頁?v, vj, vk?。万議海業賜宀頁貫v 欺vk 議察貧議幡峙?賜宀頁D[j]才貫vj 欺vk 議察貧議幡峙岻才。
卆象念中初府議麻隈房??壓匯違秤趨和?和匯訳海業肝玉議恷玉揃抄議海業駅頁?
D[j]=Min{D[i]| vi∈V-S}
凪嶄?D[i] 賜宀察?v, vi?貧議幡峙?賜宀頁D[k]( vk∈S 才察?vk, vi?貧議幡峙岻才。功象參貧蛍裂?辛參誼欺泌和宙峰議麻隈?
?1?邪譜喘揮幡議惣俊裳專edges 栖燕幣揮幡嗤?夕?edges[i][j] 燕幣察ヾvi, vjゝ貧議幡峙。飛ヾvi, vjゝ音贋壓?夸崔edges[i][j]葎∞?壓柴麻字貧辛喘塋俯議恷寄峙旗紋?。S 葎厮孀欺貫v 竃窟議恷玉揃抄議嶮泣議鹿栽?万議兜兵彜蓑葎腎鹿。椎担?貫v 竃窟欺夕貧凪噫光競泣?嶮泣?vi 辛嬬器欺恷玉揃抄海業議兜峙葎?
D[i]= edges[Locate Vex(G,v)][i] vi∈V
?2?僉夲vj?聞誼
D[j]=Min{D[i]| vi∈V-S}
vj 祥頁輝念箔誼議匯訳貫v 竃窟議恷玉揃抄議嶮泣。綜
S?S∪{j}
?3?俐個貫v 竃窟欺鹿栽V-S 貧販匯競泣vk 辛器議恷玉揃抄海業。泌惚
D[j]+ edges[j][k]<D[k]
夸俐個D[k]葎
D[k]=D[j]+ edges[j][k]
嶷鹸荷恬?2?、?3?慌n-1 肝。喇緩箔誼貫v 欺夕貧凪噫光競泣議恷玉揃抄頁卆揃抄海業弓奐議會双。麻隈8.17 葎喘C 囂冱宙峰議Dijkstra 麻隈。
void ShortestPath_1(Mgraph G,int v0,PathMatrix *p, ShortPathTable *D)
{ /*喘Dijkstra 麻隈箔嗤?利G 議v0 競泣欺凪噫競泣v 議恷玉揃抄P[v]式凪揃抄海業D[v]*/
/*飛P[v][w]葎TRUE?夸w 頁貫v0 欺v 輝念箔誼恷玉揃抄貧議競泣*/
/*final[v] 葎TRUE 輝拝叙輝v∈S, ?軸厮将箔誼貫v0 欺v 議恷玉揃抄*/
/*械楚INFINITY 葎円貧幡峙辛嬬議恷寄峙*/
for (v=0;v<G.vexnum;++v)
{fianl[v]=FALSE; D[v]=G.edges[v0][v];
for (w=0; w<G.vexnum; ++w) P[v][w]=FALSE; /*譜腎揃抄*/
if (D[v]<INFINITY) {P[v][v0]=TRUE; P[v][w]=TRUE;}
}
D[v0]=0; final[v0]=TRUE? /*兜兵晒?v0 競泣奉噐S 鹿*/
/*蝕兵麼儉桟?耽肝箔誼v0 欺蝶倖v 競泣議恷玉揃抄?旺紗v 欺鹿*/
for(i=1; i<G.vexnum; ++i) /*凪噫G.vexnum-1 倖競泣*/
{min=INFINITY; /*min 葎輝念侭岑宣v0 競泣議恷除鉦宣*/
for (w=0;w<G.vexnum;++w)
if (!final[w]) /*w 競泣壓V?S 嶄*/
if (D[w]<min) {v=w; min=D[w];}
final[v]=TRUE /*宣v0 競泣恷除議v 紗秘S 鹿栽*/
for(w=0;w>G.vexnum;++w) /*厚仟輝念恷玉揃抄*/
if (!final[w]&&(min+G.edges[v][w]<D[w])) /*俐個D[w]才P[w],w∈V-S*/
{ D[w]=min+G.edges[v][w];
P[w]=P[v]; P[w][v]=TRUE; /*P[w]=P[v]+P[w]*/
}
}
}/*ShortestPath._1*/
麻隈8.17
箭泌?夕8.26 侭幣匯倖嗤?利夕G8 議揮幡惣俊裳專葎?
和中蛍裂匯和宸倖麻隈議塰佩扮寂。及匯倖for 儉桟議扮寂鹸墫業頁O(n)?及屈倖for儉桟慌序佩n-1 肝?耽肝峇佩議扮寂頁O(n)。侭參悳頁議扮寂鹸墫業頁O(n2)。泌惚喘揮幡議惣俊燕恬葎嗤?夕議贋刈潤更?夸埋隼俐個D 議扮寂辛參受富?徽喇噐壓D ?楚嶄僉夲恷弌議蛍楚議扮寂音延?侭參悳議扮寂挽葎O(n2)。
泌惚峪錬李孀欺貫坿泣欺蝶匯倖蒙協議嶮泣議恷玉揃抄?徽頁?貫貧中厘断箔恷玉揃抄議圻尖栖心?宸倖諒籾才箔坿泣欺凪万侭嗤競泣議恷玉揃抄匯劔鹸墫?凪扮寂鹸墫業匆頁O(n2)。