图的遍历分为两种,深度优先遍历(depth-first)和广度优先遍历(breadth-first)
深度优先遍历 dfs
// 嵌套多一层是为了定义 marker 默认值,实际的遍历算法是内部的 afunction dfs(v) {let marker = []for (let i in this.vertexes) {marker[this.vertexes[i]] = false}let _this = thislet a = function (v) {console.log(v)marker[v] = truefor (let j in _this.adj[v]) {let item = _this.adj[v][j]if (!marker[item]) {a(item)}}}a(v)}
广度优先遍历 bfs
bfs(v) {let marker = []for (let i in this.vertexes) {marker[this.vertexes[i]] = false}let _this = thislet a = function (v) {marker[v] = truelet queue = []queue.push(v)while (queue.length > 0) {let item = queue.shift()console.log(item)if (!_this.adj[item]) {continue}_this.adj[item].forEach(i => {if (!marker[i]) {queue.push(i)marker[i] = true}})}}a(v)}
