用途:可以用來做地圖、還可以用來模擬社交
(一)圖的基本概念:
有向圖標明瞭連接方向,不能逆着方向
無向圖只表明鏈接關係 沒有方向,只要連接就可以通
(二)圖的表示方式
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()
打印圖: