本文共351字。
Copyright: 知识共享署名 非商业性使用 相同方式共享 4.0 国际许可协议
|
CC BY-NC-SA 4.0JavaScript 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| function Dijkstra(adj_matrix, src) { let dist = [] let visited = []
const length = adj_matrix.length const INF = Number.MAX_SAFE_INTEGER
for (let i = 0; i < length; i++) { dist[i] = INF visited[i] = false }
dist[src] = 0 let i = 0 while (i < length - 1 && src < length) { visited[src] = true let currentEdges = adj_matrix[src] for (let i = 0; i < currentEdges.length; i++) { if (currentEdges[i] !== 0) { if (dist[src] + currentEdges[i] < dist[i]) { dist[i] = currentEdges[i] + dist[src] } } } let min = INF let minIndex = -2 for (let i = 0; i < dist.length; i++) { if (!visited[i] && dist[i] < min) { min = dist[i] minIndex = i } } if (minIndex === -2) src++ else src = minIndex i++ } return dist }
let adj_matrix = [ [0, 1, 1, 1, 1], [1, 0, 0, 1, 1], [1, 0, 0, 1, 1], [1, 1, 1, 0, 1], [1, 1, 1, 1, 0], ]
console.log(Dijkstra(adj_matrix, 1))
|