瀏覽代碼

图论----单源最短路径--(Dijkstra算法)

爱玲姐姐 5 年之前
父節點
當前提交
4a0367ddc4
共有 1 個文件被更改,包括 50 次插入0 次删除
  1. 50 0
      E.cpp

+ 50 - 0
E.cpp

@@ -0,0 +1,50 @@
+#include <bits/stdc++.h>
+using namespace std;
+const int MAXN = 101;
+int a[MAXN][MAXN];
+int book[MAXN];
+int dis[MAXN];
+int n, m;
+int Dijkstra(){
+    for(int i = 1; i <= n; i++){
+        dis[i] = a[1][i];
+        book[i] = 0;
+    }
+    book[1] = 1;
+    for(int i = 1; i < n; i++){
+        int u = 2, MIN = INT_MAX;
+        for(int j = 2; j <= n; j++){
+            if(book[j] == 0 && dis[j] < MIN){
+                u = j;
+                MIN = dis[j];
+            }
+        }
+        book[u] = 1;
+        for(int j = 2; j <= n; j++){
+            if(a[u][j] < INT_MAX && book[j] == 0 && dis[j] > dis[u] + a[u][j]){
+                dis[j] = dis[u]+a[u][j];
+            }
+        }
+    }
+    return dis[n];
+}
+
+int main(){
+    while(cin >> n >> m){
+        if(n == 0 && m == 0)break;
+        for(int i = 1; i <= n; i++){
+            for(int j = 1; j <= n; j++){
+                if(i != j)
+                    a[i][j] = INT_MAX;
+                else a[i][j] = 0;
+            }
+        }
+        for(int i = 1; i <= m; i++){
+            int x, y, z;
+            cin >> x >> y >> z;
+            a[x][y] = a[y][x] = z;
+        }
+        int sum = Dijkstra();
+        cout << sum << endl;
+    }
+}