[Algorithm] JavaScript Graph Data Structure
阿新 • • 發佈:2018-12-15
A graph is a data structure comprised of a set of nodes, also known as vertices, and a set of edges. Each node in a graph may point to any other node in the graph. This is very useful for things like describing networks, creating related nonhierarchical data, and as we will see in the lesson, describing the relationships within one's family.
In a Graph, there are Nodes, and connects between nodes are Edges.
For node:
function createNode(key) { let children = []; return { key, children, // the nodes which connect to addChild(child) { children.push(child) } } }
Graph:
function createGraph(directed = false) { const nodes = []; const edges = []; return { nodes, edges, directed, addNode(key) { nodes.push(createNode(key)) }, getNode (key) { returnnodes.find(n => n.key === key) }, addEdge (node1Key, node2Key) { const node1 = this.getNode(node1Key); const node2 = this.getNode(node2Key); node1.addChild(node2); if (!directed) { node2.addChild(node1); } edges.push(`${node1Key}${node2Key}`) }, print() { return nodes.map(({children, key}) => { let result = `${key}`; if (children.length) { result += ` => ${children.map(n => n.key).join(' ')}` } return result; }).join('\n') } } }
Run:
const graph = createGraph(true) graph.addNode('Kyle') graph.addNode('Anna') graph.addNode('Krios') graph.addNode('Tali') graph.addEdge('Kyle', 'Anna') graph.addEdge('Anna', 'Kyle') graph.addEdge('Kyle', 'Krios') graph.addEdge('Kyle', 'Tali') graph.addEdge('Anna', 'Krios') graph.addEdge('Anna', 'Tali') graph.addEdge('Krios', 'Anna') graph.addEdge('Tali', 'Kyle') console.log(graph.print()) /* Kyle => Anna Krios Tali Anna => Kyle Krios Tali Krios => Anna Tali => Kyle */