xszi / javascript-algorithms

算法修炼中...
5 stars 0 forks source link

图相关知识小结 #70

Open xszi opened 3 years ago

xszi commented 3 years ago

1. 图基础知识

图

有向图

22

加权图

33

2. 图的表示

邻接矩阵

image

邻接表

image

关联矩阵

在关联矩阵中,矩阵的行表示顶点,列表示边。如下图所示,我们使用二维数组来表示两者之间的连通性,如果顶点 v 是 边e的入射点,则 array[v][e] === 1,否则 array[v][e] === 0。

image

3、创建Graph

function Graph() {
    var vertices = [];
    var adjList = new Dictionary();

    // 加顶点
    this.addVertex = function(v) {
        vertices.push(v);
        adjList.set(v, []);
    }

    // 加边
    this.addEdge = function(v, w) {
        addList.get(v).push(w);
        addList.get(W).push(v);
    }

    this.toString = function() {
        var s = '';
        for (var i = 0; i <vertices.length; i++) {
            s += vertices[i] + ' -> '
            var neighbors = adjList.get(vertices[i]);
            for (var j = 0; j < neighbors.length; j++) {
                s += neighbors[j] + ' ';
            }
            s += '\n'
        }
    }
    return s;
}

4、图的遍历

图的遍历可以用来:

算法 数据结构 描述
深度优先搜索 通过将顶点存入栈中,顶点是沿着路径被探索的,存在新的相邻顶点就去访问
广度优先搜索 队列 通过将顶点存入队列中,最先入队列的顶点先被探索