@@ -693,6 +693,55 @@ if __name__ == "__main__":
693693### Rust
694694
695695### Javascript
696+ ``` js
697+ function prim (v , edges ) {
698+ const grid = Array .from ({ length: v + 1 }, () => new Array (v + 1 ).fill (10001 )); // Fixed grid initialization
699+ const minDist = new Array (v + 1 ).fill (10001 )
700+ const isInTree = new Array (v + 1 ).fill (false )
701+ // 建構鄰接矩陣
702+ for (const [v1 , v2 , w ] of edges) {
703+ grid[v1][v2] = w
704+ grid[v2][v1] = w
705+ }
706+ // prim 演算法
707+ for (let i = 1 ; i < v ; i++ ) {
708+ let cur = - 1
709+ let tempMinDist = Number .MAX_VALUE
710+ // 1. 尋找距離生成樹最近的節點
711+ for (let j = 1 ; j < v + 1 ; j++ ) {
712+ if (! isInTree[j] && minDist[j] < tempMinDist) {
713+ tempMinDist = minDist[j]
714+ cur = j
715+ }
716+ }
717+ // 2. 將節點放入生成樹
718+ isInTree[cur] = true
719+ // 3. 更新非生成樹節點與生成樹的最短距離
720+ for (let j = 1 ; j < v + 1 ; j++ ) {
721+ if (! isInTree[j] && grid[cur][j] < minDist[j]) {
722+ minDist[j] = grid[cur][j]
723+ }
724+ }
725+ }
726+ console .log (minDist .slice (2 ).reduce ((acc , cur ) => acc + cur, 0 ))
727+ }
728+
729+
730+ async function main () {
731+ const rl = require (' readline' ).createInterface ({ input: process .stdin })
732+ const iter = rl[Symbol .asyncIterator ]()
733+ const readline = async () => (await iter .next ()).value
734+ const [v , e ] = (await readline ()).split (" " ).map (Number )
735+ const edges = []
736+ for (let i = 0 ; i < e ; i++ ) {
737+ edges .push ((await readline ()).split (" " ).map (Number ))
738+ }
739+ prim (v, edges)
740+ }
741+
742+
743+ main ()
744+ ```
696745
697746### TypeScript
698747
0 commit comments