¿Qué es un algoritmo para convertir de una lista de adyacencia a una matriz de incidencia?

La lista de adyacencia asigna cada nodo a una lista de sus vecinos. La matriz de incidencia asigna pares de nodo-borde a {0, 1}; seleccionando 1 cuando el borde incide en el nodo y 0 en caso contrario.

Tenga en cuenta que ambas representaciones suponen que los nodos y los bordes están indexados.

def adjacency_list_to_incidence_matrix (adj_list):
cuenta_nodo = len (adj_list)
edge_count = sum (map (len, adj_list)) / 2
inc_matrix = [edge_count * [0] para _ en xrange (0, node_count)]
edge_index_map = {}
para node_index en xrange (0, node_count):
para neighbour_index en adj_list [node_index]:
edge = tuple (ordenado ([node_index, neighbour_index]))
si edge no está en edge_index_map:
edge_index_map [edge] = len (edge_index_map)
edge_index = edge_index_map [edge]
inc_matriz [índice_nodo] [índice_borde] = 1
return inc_matrix

Ejemplo

Probémoslo en un gráfico pequeño con 3 nodos y 2 aristas: 1 – 0 – 2.

En [1]: adj_list = [
[1, 2],
[0]
[0]
]
En [2]: adjacency_list_to_incidence_matrix (adj_list)
Fuera [2]: [[1, 1],
[1, 0],
[0, 1]]

Suponga que la lista es como una matriz m-por-2.

int m = 4; // número de nodos
aristas int = 4; // número si elementos en la lista
int list [bordes] [2] = {{0,1}, {0,2}, {0,3}, {2,3}}; // lista de adyacencia
int mat [m] [m] = {{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}} ; // matriz vacía

para (int i = 0; i int a = lista [i] [0]; // primer vértice
int b = lista [i] [1]; // segundo vértice
mat [a] [b] = 1; // establecer elemento en la matriz
mat [b] [a] = 1; // puede querer establecer también el elemento simétrico
}

More Interesting

¿Qué es la criptografía de clave pública en términos simples? ¿Cómo se relaciona con los números primos?

Cómo seleccionar aleatoriamente una palabra de un archivo que contiene 1,000 palabras (1 palabra por línea) y mostrarla en un programa C ++

¿Debo demostrar la mayoría de los teoremas en los libros de texto de matemáticas al aprender? (Lea los detalles).

¿Puede una máquina tener verdadera inteligencia artificial sin estar basada en matemáticas superiores?

¿Qué tipo de problemas se pueden resolver instantáneamente en las computadoras?

¿Qué métodos de análisis deberían usarse cuando el nivel de la variable dependiente es mucho mayor que el número de variable independiente?

Me encanta aprender teoría, pero no siempre disfruto escribiendo código. ¿Cómo me pueden pagar para vivir en el mundo de los pensamientos? ¿Solo estoy siendo vago?

Cómo usar algoritmos y estructura de datos en la vida real

Se nos dan probabilidades [matemáticas] P (A) = P (B) = P (C) \ geq 2/3 [/ matemáticas] y sabemos que [matemáticas] P (A \ cap B \ cap C) = 0 [/ mates]. ¿Qué podemos decir sobre [matemáticas] P (A) [/ matemáticas]?

¿Cuáles son algunas de las áreas en ciencias de la computación que involucran una buena cantidad de matemáticas y también tienen aplicaciones industriales?

Amo las matemáticas y la programación; Sin embargo, tuve un primer semestre con advertencia de libertad condicional académica. ¿Puedo salir de mi pasión?

¿Hay alguna prueba matemática de que los lenguajes de computadora modernos pueden representar cualquier algoritmo finito usando una cantidad finita de código?

Cómo convertir 25 cm a mm sin usar una regla

¿Cuál es el mejor recurso para aprender sobre las pruebas de corrección para algoritmos?

¿Cómo se crean los rompecabezas de sudoku a gran escala?