concepto
Un gráfico es un modelo abstracto de la estructura de la red , un grupo de nodos conectados por bordes .
lograr
No hay gráficos en JavaScript, pero los gráficos están disponibles Object
y Array
construidos.
Matriz de adyacencia
El gráfico anterior se puede expresar como una matriz de adyacencia:
Lista de adyacencia
La figura anterior se puede expresar como una lista de adyacencia:
const graph = {
A: ["B"],
B: ["C", "D"],
C: ["E"],
D: ["A"],
E: ["D"],
}
atravesar
Como se muestra en la figura siguiente, el punto de partida es 节点2
:
// start:2
const graph = {
0: [1, 2],
1: [2],
2: [0, 3],
3: [3]
};
Travesía en profundidad primero
Busque las ramas del gráfico lo más profundamente posible.
- Visita el nodo raíz
- El nodo raíz no ha visitado los nodos adyacentes secuencialmente en profundidad primero el recorrido
// 深度优先遍历图
// 已访问过的节点集合
const visited = new Set();
const dfs = n => {
console.log(n);
visited.add(n);
graph[n].forEach(c => {
if (!visited.has(c)) {
dfs(c);
}
});
};
Amplitud primer recorrido
Primero, visite el nodo más cercano al nodo raíz.
- Crea una nueva cola, el nodo raíz se une a la cola
- La cabeza y la visita
- El jefe del equipo no ha visitado los contactos adyacentes al equipo.
- Repita los pasos 2 y 3 hasta que la cola esté vacía
const visited = new Set();
const q = [2];
// 起点先默认访问了
visited.add(2);
while (q.length) {
// 队头出队
const n = q.shift();
// 访问
console.log(n);
graph[n].forEach(c => {
if (!visited.has(c)) {
q.push(c);
// 入队就代表已经访问过了
visited.add(c);
}
});
}