js 数据结构算法 --- 图

用途:可以用来做地图、还可以用来模拟社交

(一)图的基本概念:

js 数据结构算法 --- 图_第1张图片

有向图标明了连接方向,不能逆着方向

无向图只表明链接关系 没有方向,只要连接就可以通

(二)图的表示方式

1. 邻接矩阵

 

js 数据结构算法 --- 图_第2张图片

1 表示链接 0表示无连接 对角线永远是0 自己不能跟自己链接

计算机以 邻接矩阵的方式 来存储

2. 邻接表

js 数据结构算法 --- 图_第3张图片

(三)代码转化

js 数据结构算法 --- 图_第4张图片

顶点是一个数组,数组里面存放了所有的元素

边是一个对象,里面是 顶点与边的映射关系

js 数据结构算法 --- 图_第5张图片

例子如下图:

class Graph {
      constructor () {
        // 顶点
        this.vertices = [],
        // 边
        this.adjList = {}
      }

      // 添加顶点
      addVertex (value) {
        this.vertices.push(value) // 向顶点数组中添加
        this.adjList[value] = [] // 初始化该顶点的边
      }
      // 添加边 两个参数 1. 顶点一 2. 顶点二
      addEdge(vertex1, vertex2) {
        // 顶点的连接是双向的
        this.adjList[vertex1].push(vertex2)
        this.adjList[vertex2].push(vertex1)
      }
      // 获取边映射对象
      getAddEdge() {
        for(var i = 0; i < this.vertices.length; i++) {
          var currentVertex = this.vertices[i]
          var S = currentVertex + "=>"
          for (var j = 0; j < this.adjList[currentVertex].length; j++) {
            S += this.adjList[currentVertex][j]
          }
          console.log(S)
        }
      }
    }

    var graph = new Graph()
    graph.addVertex('A')
    graph.addVertex('B')
    graph.addVertex('C')
    graph.addVertex('D')
    graph.addVertex('E')
    graph.addVertex('F')
    graph.addEdge('A', 'B')
    graph.addEdge('A', 'C')
    graph.addEdge('A', 'D')
    graph.addEdge('C', 'D')
    graph.addEdge('B', 'E')
    graph.addEdge('B', 'F')
    graph.getAddEdge()

js 数据结构算法 --- 图_第6张图片

打印图:

js 数据结构算法 --- 图_第7张图片

 

 

你可能感兴趣的:(js数据结构和算法)