Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Matriz de Adyacencia: Representación de grafos en Java

Matriz de Adyacencia: Representación de grafos en Java

Por jc mouse jueves, enero 5, 2017

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:

  • 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 ves de 1.
  • Cada elemento (i,j) valdrá 0, cuando no exista una arista que una los nodos i y j.

Ejemplo Grafo no dirigido

graph

Este grafo consta de 5 vértices (nodos), por tanto nuestra matriz de adyacencia sera 5×5

matriz vacio

Completamos para la primera fila de la siguiente manera:

  • El nodo 1 no es un bucle, por tanto (1,1), vale 0
  • Vemos que del vértice 1 al vértice 2, salen dos aristas, por tanto para (1,2) sumamos +1 para cada arista, es decir, (1,2) vale 2
  • De 1 a 3 existe una arista, (1,3)=1
  • De 1 a 4 existe una arista, (1,4)=1
  • De 1 a 5 no existe ninguna arista, por tanto, (1,5)=0

primera linea

Y para el resto de las filas, tenemos:

Adjacency

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

Adjacency matrix

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.

dirigido matriz

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:

graph java

 

Tags

Artículos similares

Añadir Splash Screen en Java/Netbeans

¿Splash Screen? El splash screen o traducido al aspañol 😉  es una «Pantalla de bienvenida» que se muestra cuando se ejec[...]

Evaluar expresiones matemáticas en Java con JavaScript

Java 8 trae consigo una nueva versión del motor de JavaScript llamada Nashorn, este motor introduce mejoras de rendimien[...]

Laravel 12 Theming Multi-Dominio: Cómo Servir Múltiples Diseños con un Solo Backend Monolítico

El tema que trataremos en este post es la implementación de una arquitectura de temas dinámicos (theming) dentro de un p[...]

CRC32: Verificación de Redundancia Cíclica

El CRC o Verificación de Redundancia Cíclica o Comprobación de redundancia cíclica  es una técnica utiliz[...]

Primeros pasos con Quasar Framework

Quasar es un proyecto Open Source basado en el Framework Vue que nos permite desarrollar proyectos de todo tipo, por eje[...]

Personalizar JTable: Tabla con footer (Pie de página)

En muchas ocasiones es necesaria la personalización de componentes java para que estos se adecuen a nuestros requerimien[...]