图(数据结构)

115 阅读1分钟

邻接表图

const graph = {
    0: [1, 2],
    1: [2],
    2: [0, 3],
    3: [3]
}

遍历图

深度优先遍历

1.访问根节点
2.对根节点的没访问过的相邻节点挨个进行深度优先遍历

// 深度优先遍历
const visited = new Set();
const dfs = (n) => {
    console.log(n);
    visited.add(n);
    graph[n].forEach(c => {
        if (!visited.has(c)) {
            dfs(c)
        }
    });
}

广度优先遍历

1.新建一个队列
2.把队头出队并访问
3.把队头的没访问过的相邻节点入队
4.重复2、3步直到队列为空

// 广度优先遍历
const bfs = (n) => {
    const visited = new Set();
    visited.add(n);
    const q = [n];
    while (q.length) {
        const n = q.shift();
        console.log(n);
        graph[n].forEach(c => {
            if (!visited.has(c)) {
                q.push(c)
                visited.add(c);
            }
        });
    }
}