123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 'use strict'
- /**
- * Definition for undirected graph.
- * function UndirectedGraphNode(label) {
- * this.label = label;
- * this.neighbors = []; // Array of UndirectedGraphNode
- * }
- */
- function UndirectedGraphNode(label) {
- this.label = label
- this.neighbors = [] // Array of UndirectedGraphNode
- }
- /**
- * @param {UndirectedGraphNode} graph
- * @return {UndirectedGraphNode}
- */
- var cloneGraph = function (graph) {
- if (graph == null) return null
- const map = new Map()
- return clone(graph, map)
- }
- /**
- * @param {UndirectedGraphNode} node
- * @param {Map} map
- * @return {UndirectedGraphNode}
- */
- function clone(node, map) { // DFS
- if (node === null) return null
- if (map.get(node.label) !== undefined)
- return map.get(node.label)
- const copy = new UndirectedGraphNode(node.label)
- map.set(copy.label, copy)
- for (const n of node.neighbors) {
- copy.neighbors.push(clone(n, map))
- }
- return copy
- }
- function __main__() {
- /* eslint no-console: ["error", {allow: ["log"]}] */
- const logger = console.log.bind(console)
- const n3 = new UndirectedGraphNode(3)
- const n2 = new UndirectedGraphNode(2)
- const n1 = new UndirectedGraphNode(1)
- n3.neighbors = [n2, n3]
- n2.neighbors = [n1, n3]
- n1.neighbors = [n2, n3]
- const n = cloneGraph(n1)
- logger(n)
- }
- __main__()
|