示例無向圖如下:(起始點為v0)
鄰接矩陣為:
注意:其中沒有連線的邊和自己到自己的點權值用10000表示。
**:
static結果void main(string
args)
, , , , , };
int n = 6;
int s = new
int[n]; //
最短路徑的頂點集合
string mid = new
string[n];//
點的路線
for (int i = 0; i < n; i++)
shortestpathbydijkstra(n, graph, s, mid);
}public
static
int iscontain(int m,int s)//
判斷該頂點是否已經計算過
} return
index;
}///
///dijkstrah實現最短路演算法
///static
void shortestpathbydijkstra(int n,int[,] graph, int s, string
mid)
}//將下乙個點加入s
s[next] =next;
if (min == 1000
) 的最短路徑為:無
", next);
}else
的最短路徑為:,路徑為:v0->v
", next, min, mid[next]);
}//重新初始0行所有列值
for (int j = 1; j < n; j++)//
迴圈第0行的列}}
}}
解析:分三部分,主函式中給出圖中的初始鄰接矩陣,頂點個數。以及初始化最短路徑的頂點集合和點路線集合。
iscontain(int m,int s)這個函式是在每次迴圈的時候判斷該點是否已經在最短路徑集合中,即已經遍歷過。
接下來就是dijkstra演算法,大致步驟如下:
1、新增初始頂點v0在集合s中,遍歷第一行,找最小的權值所在的頂點列值j。
2、將j值做為下乙個點加入集合s中,輸出此時到達j點的最小路徑。
3、重新初始化第一行的值,通過判斷加入某點後graph[next][j]+min是否小於graph[0, j](其中j不在集合s中),若是則替換後者,並記錄此過程 mid[j] = mid[next] + "->v" + next;
4、迴圈1、2、3步驟頂點數-1次。
詳細參考:
全域性路徑規劃之 Dijkstra演算法
通過dijkstra計算圖g中的最短路徑時,需要指定起點s 即從頂點s開始計算 此外,引進兩個集合s和u。s的作用是記錄已求出最短路徑的頂點 以及相應的最短路徑長度 而u則是記錄還未求出最短路徑的頂點 以及該頂點到起點s的距離 初始時,s中只有起點s u中是除s之外的頂點,並且u中頂點的路徑是 起點...
全域性路徑規劃 01 Dijkstra演算法
應用場景 城市路網的路徑規劃 演算法流程 初始時,s集只包含起點s,u集包含除s外的其他節點,u集中的節點v與起點s相鄰,則該節點儲存值為距起點s的距離,若與起點s不相鄰,則距離為無限大 從u集中選出距離起點最短的節點k,並將節點k加入到s集中,同時從u集中移除節點k 更新u集中各個節點到起點s的距...
Dijkstra 旅遊規劃
有了一張自駕旅遊路線圖,你會知道城市間的高速公路長度 以及該公路要收取的過路費。現在需要你寫乙個程式,幫助前來諮詢的遊客找一條出發地和目的地之間的最短路徑。如果有若干條路徑都是最短的,那麼需要輸出最便宜的一條路徑。輸入格式 輸入說明 輸入資料的第1行給出4個正整數n m s d,其中n 2 n 50...