SOURCE

let Arr2 = [
    [0, 1, 0, 0, 0, 1, 0, 0, 0],
    [1, 0, 1, 0, 0, 0, 1, 0, 1],
    [0, 1, 0, 1, 0, 0, 0, 0, 1],
    [0, 0, 1, 0, 1, 0, 1, 1, 1],
    [0, 0, 0, 1, 0, 1, 0, 1, 0],
    [1, 0, 0, 0, 0, 0, 1, 0, 0],
    [0, 1, 0, 1, 0, 1, 0, 1, 0],
    [0, 0, 0, 1, 1, 0, 1, 0, 0],
    [0, 1, 1, 1, 0, 0, 0, 0, 0],
]

let numVertexes = 9, //定义顶点数
    numEdges = 14; //定义边数

function MGraph() {
    this.vexs = []; //顶点表
    this.arc = []; // 邻接矩阵,可看作边表
    this.numVertexes = null; //图中当前的顶点数
    this.numEdges = null; //图中当前的边数
}

let G = new MGraph()
function createGraph() {
    G.numVertexes = numVertexes
    G.numEdges = numEdges
    for (let i = 0; i < G.numVertexes; i++) {
        G.vexs.push(String.fromCharCode(65 + i))
    }
    for (let i = 0; i < G.numVertexes; i++) {
        let arr = []
        for (j = 0; j < G.numVertexes; j++) {
            arr.push(Arr2[i][j])
        }
        G.arc.push(arr)
    }
}

createGraph()

let visited = new Array(G.numVertexes).fill(false)
function DFS(i) {
    visited[i] = true
    // console.log('打印顶点:', G.vexs[i])
    for (let j = 0; j < G.numVertexes; j ++) {
        if(G.arc[i][j] === 1 && !visited[j]) {
            console.log(`${G.vexs[i]} -> ${G.vexs[j]}`)
            DFS(j)
        }
    }
} 

function DFSTraverse() {
    visited = new Array(G.numVertexes).fill(false)

    for (let i = 0; i < G.numVertexes; i ++) {
        if (!visited[i]) {
            DFS(i)
        }
    }
}

function BFSTraverse() {
    let queue = []; //初始化队列
    visited = new Array(G.numVertexes).fill(false)

    for (let i = 0; i < G.numVertexes; i++) { //对每一个顶点做循环
        if (!visited[i]) { //如果没有访问过就处理
            visited[i] = true;
            queue.push(i); //将此顶点入队列
            while (queue.length != 0) { //当前队列不为空
                queue.shift();
                for (let j = 0; j < G.numVertexes; j++) {
                    //判断其他顶点若与当前顶点存在边且未访问过
                    if (G.arc[i][j] == 1 && !visited[j]) {
                        visited[j] = true;
                        console.log(`${G.vexs[i]} -> ${G.vexs[j]}`)
                        queue.push(j) //将此顶点放入队列
                    }
                }
            }
        }
    }
}

// DFSTraverse()
BFSTraverse()

console 命令行工具 X clear

                    
>
console