Gráfico de estructura de datos de JavaScript

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 Objecty Arrayconstruidos.

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.

  1. Visita el nodo raíz
  2. 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.

  1. Crea una nueva cola, el nodo raíz se une a la cola
  2. La cabeza y la visita
  3. El jefe del equipo no ha visitado los contactos adyacentes al equipo.
  4. 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);
        }
    });
}

Supongo que te gusta

Origin blog.csdn.net/Jack_lzx/article/details/114785383
Recomendado
Clasificación