From f3c59a17062fb0a89b5f89b7845341386952a6b1 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 24 九月 2025 16:01:06 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 server/system_service/src/main/java/com/doumee/core/utils/DijkstraUtil.java |  108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 108 insertions(+), 0 deletions(-)

diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DijkstraUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/DijkstraUtil.java
new file mode 100644
index 0000000..6cd9413
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DijkstraUtil.java
@@ -0,0 +1,108 @@
+package com.doumee.core.utils;
+
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Queue;
+
+public class DijkstraUtil {
+    private Queue visited;
+    int[] distance;
+
+    public DijkstraUtil(int len) {
+        // TODO Auto-generated constructor stub
+        visited = new LinkedList();
+        distance = new int[len];
+
+    }
+
+    private int getIndex(Queue q, int[] dis) {
+        int k = -1;
+        int min_num = Integer.MAX_VALUE;
+        for (int i = 0; i < dis.length; i++) {
+            if (!q.contains(i)) {
+                if (dis[i] < min_num) {
+                    min_num = dis[i];
+                    k = i;
+                }
+            }
+        }
+        return k;
+    }
+
+    public void dijkstra(int[][] weight, Object[] str, int v) {
+        HashMap path;
+        path = new HashMap();
+        for (int i = 0; i < str.length; i++)
+            path.put(i, "");
+
+        //鍒濆鍖栬矾寰勯暱搴︽暟缁刣istance
+        for (int i = 0; i < str.length; i++) {
+            path.put(i, path.get(i) + "" + str[v]);
+            if (i == v)
+                distance[i] = 0;
+            else if (weight[v][i] != -1) {
+                distance[i] = weight[v][i];
+                path.put(i, path.get(i) + "-->" + str[i]);
+            } else
+                distance[i] = Integer.MAX_VALUE;
+        }
+        visited.add(v);
+        while (visited.size() < str.length) {
+            int k = getIndex(visited, distance);//鑾峰彇鏈闂偣涓窛绂绘簮鐐规渶杩戠殑鐐�
+            visited.add(k);
+            if (k != -1) {
+
+                for (int j = 0; j < str.length; j++) {
+                    //鍒ゆ柇k鐐硅兘澶熺洿鎺ュ埌杈剧殑鐐�
+                    if (weight[k][j] != -1) {
+                        //閫氳繃閬嶅巻鍚勭偣锛屾瘮杈冩槸鍚︽湁姣斿綋鍓嶆洿鐭殑璺緞锛屾湁鐨勮瘽锛屽垯鏇存柊distance锛屽苟鏇存柊path銆�
+                        if (distance[j] > distance[k] + weight[k][j]) {
+                            distance[j] = distance[k] + weight[k][j];
+                            path.put(j, path.get(k) + "-->" + str[j]);
+                        }
+                    }
+
+                }
+            }
+        }
+        for (int h = 0; h < str.length; h++) {
+            System.out.printf(str[v] + "-->" + str[h] + ":" + distance[h] + " ");
+            if (distance[h] == Integer.MAX_VALUE)
+                System.out.print(str[v] + "-->" + str[h] + "涔嬮棿娌℃湁鍙�氳璺緞");
+            else
+                System.out.print(str[v] + "-" + str[h] + "涔嬮棿鏈夋渶鐭矾寰勶紝鍏蜂綋璺緞涓猴細" + path.get(h).toString());
+            System.out.println();
+        }
+        visited.clear();
+
+    }
+
+    public static void main(String[] args) {
+        // TODO Auto-generated method stub
+       /* int[][] weight = {
+                {0, 10, 12, -1, -1, -1},
+                {-1, 0, -1, 16, 25, -1},
+                {4, 3, 0, 12, -1, 8},
+                {-1, -1, -1, 0, 7, -1},
+                {-1, -1, -1, -1, 0, -1},
+                {-1, -1, -1, 2, -1, 0}};
+        String[] str = {"V1", "V2", "V3", "V4", "V5", "V6"};
+        int len = str.length;
+        DijkstraUtil dijkstra = new DijkstraUtil(len);
+        //渚濇璁╁悇鐐瑰綋婧愮偣锛屽苟璋冪敤dijkstra鍑芥暟
+        for (int i = 0; i < str.length; i++) {
+            dijkstra.dijkstra(weight, str, i);
+        }*/
+
+        int[][] weight = {
+                {0, 10, 5, 7, -1},
+                {-1, 0, 4, 5, 10},
+                {-1, 4, 0, 6, 5},
+                {-1, 5, 6, 0, 7},
+                {-1, -1, -1, -1, 0}};
+        String[] str = {"A", "B", "C", "D", "E"};
+        DijkstraUtil dijkstra = new DijkstraUtil(str.length);
+        dijkstra.dijkstra(weight, str, 0);
+    }
+
+}

--
Gitblit v1.9.3