(graph: number[][])
| 62 | * @see https://en.wikipedia.org/wiki/Kosaraju%27s_algorithm |
| 63 | */ |
| 64 | export const kosajaru = (graph: number[][]): number[][] => { |
| 65 | const visited = Array(graph.length).fill(false) |
| 66 | |
| 67 | const stack: number[] = [] |
| 68 | for (let i = 0; i < graph.length; ++i) { |
| 69 | getNodePriorities(graph, visited, stack, i) |
| 70 | } |
| 71 | |
| 72 | const transposedGraph = transpose(graph) |
| 73 | |
| 74 | const sccs = [] |
| 75 | visited.fill(false) |
| 76 | for (let i = stack.length - 1; i >= 0; --i) { |
| 77 | if (!visited[stack[i]]) { |
| 78 | const scc: number[] = [] |
| 79 | gatherScc(transposedGraph, visited, stack[i], scc) |
| 80 | sccs.push(scc) |
| 81 | } |
| 82 | } |
| 83 | return sccs |
| 84 | } |
no test coverage detected