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 42d84f8

Browse files
Merge pull request youngyangyang04#2758 from suinming/kamacoder-47-js
feat: 47. 参加科学大会新增js解法
2 parents fc9e48a + 1b08a8e commit 42d84f8

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 によって変換されたページ (->オリジナル) /