js 數據結構算法 --- 圖

用途:可以用來做地圖、還可以用來模擬社交

(一)圖的基本概念:

有向圖標明瞭連接方向,不能逆着方向

無向圖只表明鏈接關係 沒有方向,只要連接就可以通

(二)圖的表示方式

1. 鄰接矩陣

 

1 表示鏈接 0表示無連接 對角線永遠是0 自己不能跟自己鏈接

計算機以 鄰接矩陣的方式 來存儲

2. 鄰接表

(三)代碼轉化

頂點是一個數組,數組裏面存放了所有的元素

邊是一個對象,裏面是 頂點與邊的映射關係

例子如下圖:

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()

打印圖:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章