En este post conoceremos una forma de representar grafos mediante una Matriz de Adyacencia y un ejemplo básico de este en lenguaje java.
¿Qué es una Matriz de Adyacencia?
Es 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.
¿Como construir una Matriz de Adyacencia?
Para construir una matriz de adyacencia, debemos tomar en cuenta los siguientes aspectos:
Ejemplo Grafo no dirigido
Este grafo consta de 5 vértices (nodos), por tanto nuestra matriz de adyacencia sera 5×5
Completamos para la primera fila de la siguiente manera:
Y para el resto de las filas, tenemos:
Algo que podemos notar es que cuando el grafo es no dirigido, la matriz resultante es simétrica respecto a la diagonal principal.
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 cuesta esta vez, la dirección de cada arista.
Representación en lenguaje java
Siguiendo el ejemplo de este post, la matriz de adyacencia sera 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.
/** * @see https://www.jc-mouse.net/ * @author mouse */ public class Matriz_de_adyacencia { private int n; private int[][] matriz; /** * Constructor de clase * @param n numero de nodos */ public Matriz_de_adyacencia(int n) { this.n = n; matriz = new int[this.n][this.n]; //se inicializa matriz en 0 for(int i=0; i< n; i++){ for(int j=0; j< n; j++){ matriz[i][j] = 0; } } } public void agregar(int i, int j){ matriz[i][j] += 1; } public void remover(int i, int j){ if(matriz[i][j]>0) matriz[i][j] -= 1; } public void imprimir(){ for(int i=0; i< n; i++){ for(int j=0; j< n; j++){ System.out.print( matriz[i][j] + " " ); } System.out.println(); } } }
Y ahora implementado la clase anterior con el grafo no dirigido usado como ejemplo en este post, tenemos lo siguiente:
public static void main(String[] args) { Matriz_de_adyacencia matriz = new Matriz_de_adyacencia(5); matriz.agregar(0, 1); matriz.agregar(0, 1); matriz.agregar(0, 2); matriz.agregar(0, 3); matriz.agregar(1, 0); matriz.agregar(1, 0); matriz.agregar(1, 4); matriz.agregar(2, 0); matriz.agregar(2, 3); matriz.agregar(2, 4); matriz.agregar(3, 0); matriz.agregar(3, 2); matriz.agregar(4, 1); matriz.agregar(4, 2); matriz.agregar(4, 4); matriz.agregar(4, 4); matriz.imprimir(); }
Y como salida por consola tendremos:
Aplicación en Java realida con el IDE de Netbeans 6.9 para trabajar con images en Base de Datos en Access 2003, el progr[...]
El siguiente código te permite abrir enlaces web desde un JLabel, ademas aprovechando el soporte a etiquetas HTML del co[...]
Zoom es un software de videollamadas y reuniones virtuales, accesible desde computadoras de escritorio, computadoras por[...]
Spark Framework es un conjunto de librerías para los lenguajes Java y Kotlin que nos sirve para el desarrollo rápido y s[...]
A veces navegando en la internet buscando novedades , investigando o simplemente perdiendo el tiempo 🙂 se encuentran cos[...]
El Algoritmo de Aldous-Broder llamado así por dos matemáticos, David Aldous and A. Broder (quienes trabajaban en la inve[...]