Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1b08a8e

Browse files
committed
feat: 47. 参加科学大会新增js解法
1 parent faeda4b commit 1b08a8e

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

‎problems/kamacoder/0047.参会dijkstra朴素.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /