- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Ch9.3-4 Shortest-Path Algorithm, Network Flow Problem
§3 Shortest Path Algorithms
1. Single-Source Shortest-Path Problem
Given as input a weighted graph, G = ( V, E ), and a distinguished vertex, s, find the shortest weighted path from s to every other vertex in G.
Negative-cost cycle
Note: If there is no negative-cost cycle, the shortest path from s to s is defined to be zero.
1/17
§3 Shortest Path Algorithms
? Unweighted Shortest Paths
0
0: ? v3
1: ?
v1 and v6
1
1
2: ?
v2 and v4
2
2
3: ?
v5
and v7
3
3
? Sketch of the idea
Breadth-first search
? Implementation
Table[ i ].Dist ::= distance from s to vi /* initialized to be ? except for s */
Table[ i ].Known ::= 1 if vi is checked; or 0 if not
Table[ i ].Path ::= for tracking the path /* initialized to be 0 */
2/17
§3 Shortest Path Algorithms
void Unweighted( Table T )
{ int CurrDist;
Vertex V, W;
for ( CurrDist = 0; CurrDist NumVertex; CurrDist ++ ) {
for ( each vertex V )
if ( !T[ V ].Known T[ V ].Dist == CurrDist ) {
T[ V ].Known = true;
for ( each W adjacent to V )
if ( T[ W ].Dist == Infinity ) {
T[ W ].Dist = CurrDist + 1;
T[ W ].Path = V;
} /* end-if Dist == Infinity */
} /* end-if !Known Dist == CurrDist */
} /* end-for CurrDist */
}
The worst case:
? T = O( |V|2 )
If V is unknown yet has Dist Infinity, then Dist is either CurrDist or CurrDist+1.
3/17
§3 Shortest Path Algorithms
? Improvement
void Unweighted( Table T )
{ /* T is initialized with the source vertex S given */
Queue Q;
Vertex V, W;
Q = CreateQueue (NumVertex ); MakeEmpty( Q );
Enqueue( S, Q ); /* Enqueue the source vertex */
while ( !IsEmpty( Q ) ) {
V = Dequeue( Q );
T[ V ].Known = true; /* not really necessary */
for ( each W adjacent to V )
if ( T[ W ].Dist == Infinity ) {
T[ W ].Dist = T[ V ].Dist + 1;
T[ W ].Path = V;
Enqueue( W, Q );
} /* end-if Dist == Infinity */
} /* end-while */
DisposeQueue( Q ); /* free memory */
}
0
v3
v7
1
v3
v1
1
v3
v
您可能关注的文档
- Analysis of molecular variance (AMOVA).pdf
- Analysis_GAMM_2013.pdf
- Analytical modelling of wind speed deficit in large offshore wind farms.pdf
- ANALYTICAL TREATMENT OF RESISTIVE WAKE POTENTIALS IN ROUND PIPE.pdf
- Analytical_approach_in_QbD_SSPC.44161808.pdf
- anatomy or physiology.pdf
- AnchorChip Based MALDI Sample Preparation.pdf
- and F (x) its universal barrier function. Let D k.pdf
- Andorid 说明书.pdf
- android Bitmap用法总结.pdf
文档评论(0)