Edge.js
1 2 3 4 5 6 7 8 | function Edge(v, w) { this .v = v; this .w = w; this .toString = function () { return `[${v}-${w}]`; } } module.exports = Edge; |
FindBridges.js
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 | const Graph = require( "../../graph/Graph" ); const Edge = require( "./Edge" ); function FindBridges($G) { var G = $G, visited = new Array(G.V()).fill( false ); var low = new Array(G.V()), ord = new Array(G.V()); var cnt = 0; var res = new Array(); this .result = function () { return res.toString(); } var dfs = function ($v, $parent) { visited[$v] = true ; low[$v] = cnt; ord[$v] = cnt; cnt ++; for ( var w of G.adj($v)) { if (!visited[w]) { dfs(w, $v); low[$v] = Math.min(low[w], low[$v]); if (low[w] > ord[$v]) { res.push( new Edge($v, w)); } } else if (w != $parent) { low[$v] = Math.min(low[w], low[$v]); } } } for ( var v = 0; v < G.V(); v++) { if (!visited[v]) { dfs(v, v); } } } var g = new Graph( "data/寻找桥的算法/g3.txt" ); var fb = new FindBridges(g); console.log(fb.result()) |