码迷,mamicode.com
首页 > 编程语言 > 详细

[Algorithm] JavaScript Graph Data Structure

时间:2018-12-15 10:26:26      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:children   ike   nod   asc   ted   nec   code   algorithm   int   

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) {
            return nodes.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
*/

 

[Algorithm] JavaScript Graph Data Structure

标签:children   ike   nod   asc   ted   nec   code   algorithm   int   

原文地址:https://www.cnblogs.com/Answer1215/p/10122411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!