@@ -869,6 +869,65 @@ if __name__ == "__main__":
869869
870870### Javascript
871871
872+ ``` js
873+ function dijkstra (grid , start , end ) {
874+ const visited = Array .from ({length: end + 1 }, () => false )
875+ const minDist = Array .from ({length: end + 1 }, () => Number .MAX_VALUE )
876+ minDist[start] = 0
877+
878+ for (let i = 1 ; i < end + 1 ; i++ ) {
879+ let cur = - 1
880+ let tempMinDist = Number .MAX_VALUE
881+ // 1. 找尋與起始點距離最近且未被訪的節點
882+ for (let j = 1 ; j < end + 1 ; j++ ) {
883+ if (! visited[j] && minDist[j] < tempMinDist) {
884+ cur = j
885+ tempMinDist = minDist[j]
886+ }
887+ }
888+ if (cur === - 1 ) break ;
889+
890+ // 2. 更新節點狀態為已拜訪
891+ visited[cur] = true
892+
893+ // 3. 更新未拜訪節點與起始點的最短距離
894+ for (let j = 1 ; j < end + 1 ; j++ ) {
895+ if (! visited[j] && grid[cur][j] != Number .MAX_VALUE
896+ && grid[cur][j] + minDist[cur] < minDist[j]
897+ ) {
898+ minDist[j] = grid[cur][j] + minDist[cur]
899+ }
900+ }
901+ }
902+
903+ return minDist[end] === Number .MAX_VALUE ? - 1 : minDist[end]
904+ }
905+
906+
907+ async function main () {
908+ // 輸入
909+ const rl = require (' readline' ).createInterface ({ input: process .stdin })
910+ const iter = rl[Symbol .asyncIterator ]()
911+ const readline = async () => (await iter .next ()).value
912+ const [n , m ] = (await readline ()).split (" " ).map (Number )
913+ const grid = Array .from ({length: n + 1 },
914+ () => Array .from ({length: n + 1 }, () => Number .MAX_VALUE ))
915+ for (let i = 0 ; i < m ; i++ ) {
916+ const [s , e , w ] = (await readline ()).split (" " ).map (Number )
917+ grid[s][e] = w
918+ }
919+
920+ // dijkstra
921+ const result = dijkstra (grid, 1 , n)
922+
923+ // 輸出
924+ console .log (result)
925+ }
926+
927+
928+ main ()
929+ ```
930+
872931### TypeScript
873932
874933### PhP
0 commit comments