Académique Documents
Professionnel Documents
Culture Documents
Introducción
Una de las maneras más fáciles de implementar un grafo es usar una matriz bidimensional.
En esta implementación de matriz, cada una de las filas y columnas representa un vértice en
el grafo. El valor que se almacena en la celda en la intersección de la fila v y la
columna w indica si hay una arista desde el vértice v al vértice w. Cuando dos vértices están
conectados por una arista, decimos que son adyacentes. (InteractivePython, 2016)
1. Objetivo
Entender cómo es la forma correcta de representar un grafo con la ayuda de las matrices
de adyacencia y las relaciones que esta lleva con las listas de adyacencia.
2. Procedimiento o desarrollo
MATRICES DE ADYACENCIA
Dentro del análisis de algoritmos un punto importante de estudio son las matrices de
adyacencia que es una forma de representar un grafo.
Según el sitio web (MOUSE, 2017). Una matriz cuadrada de n filas x n columnas donde, n es
la máxima cantidad de nodos que tiene el grafo. Es la forma más sencilla de representar un
grafo, pero a la vez, requiere más espacio de memoria que otros métodos, por lo que requiere
al menos n^2 bits de memoria.
De acuerdo con el sitio web antes citado la forma de construir una matriz de adyacencia,
debemos tomar en cuenta los siguientes aspectos:
A cada elemento (i, j) se suma 1, cuando exista una arista que una los vértices
(nodos) i y j.
Si una arista es un bucle, y el grafo es no dirigido, se suma 2 en vez de 1.
Cada elemento (i, j) valdrá 0, cuando no exista una arista que una los nodos i y j.
Este grafo consta de 5 vértices (nodos), por tanto nuestra matriz de adyacencia será 5×5
Ahora Algo que podemos notar es que cuando el grafo es no dirigido, la matriz resultante es
simétrica respecto a la diagonal principal.
Ilustración 5 Ejemplo Grafo dirigido
Para representar un grafo dirigido con una matriz de adyacencia se usan los mismos pasos de
un grafo no dirigido, tomando en cuenta esta vez, la dirección de cada arista.
Siguiendo el ejemplo de este post, la matriz de adyacencia será de tipo entero, sin
pesos, se implementan los métodos mínimos de agregar, remover e imprimir. El código es
sencillo y fácil de entender por lo que no requiere de más comentarios.
𝑝𝑢𝑏𝑙𝑖𝑐 𝑐𝑙𝑎𝑠𝑠 𝑀𝑎𝑡𝑟𝑖𝑧_𝑑𝑒_𝑎𝑑𝑦𝑎𝑐𝑒𝑛𝑐𝑖𝑎 {
𝑝𝑟𝑖𝑣𝑎𝑡𝑒 𝑖𝑛𝑡 𝑛;
𝑝𝑟𝑖𝑣𝑎𝑡𝑒 𝑖𝑛𝑡[][] 𝑚𝑎𝑡𝑟𝑖𝑧;
/∗∗
∗ 𝐶𝑜𝑛𝑠𝑡𝑟𝑢𝑐𝑡𝑜𝑟 𝑑𝑒 𝑐𝑙𝑎𝑠𝑒
∗ @𝑝𝑎𝑟𝑎𝑚 𝑛 𝑛𝑢𝑚𝑒𝑟𝑜 𝑑𝑒 𝑛𝑜𝑑𝑜𝑠
∗/
𝑝𝑢𝑏𝑙𝑖𝑐 𝑀𝑎𝑡𝑟𝑖𝑧_𝑑𝑒_𝑎𝑑𝑦𝑎𝑐𝑒𝑛𝑐𝑖𝑎(𝑖𝑛𝑡 𝑛) {
𝑡ℎ𝑖𝑠. 𝑛 = 𝑛;
𝑚𝑎𝑡𝑟𝑖𝑧 = 𝑛𝑒𝑤 𝑖𝑛𝑡[𝑡ℎ𝑖𝑠. 𝑛][𝑡ℎ𝑖𝑠. 𝑛];
//𝑠𝑒 𝑖𝑛𝑖𝑐𝑖𝑎𝑙𝑖𝑧𝑎 𝑚𝑎𝑡𝑟𝑖𝑧 𝑒𝑛 0
𝑓𝑜𝑟(𝑖𝑛𝑡 𝑖 = 0; 𝑖 < 𝑛; 𝑖 + +){
𝑓𝑜𝑟(𝑖𝑛𝑡 𝑗 = 0; 𝑗 < 𝑛; 𝑗 + +){
𝑚𝑎𝑡𝑟𝑖𝑧[𝑖][𝑗] = 0;
}
}
}
Y ahora implementado la clase anterior con el grafo no dirigido usado como ejemplo en este
post, tenemos lo siguiente: