Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Matriz de Adyacencia: Representación de grafos en Java

Matriz de Adyacencia: Representación de grafos en Java

Autor 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 http://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

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Agregar tablas a los items de un JComboBox

Agregar tablas a los items de un JComboBox

En este post personalizaremos un componente JComboBox para que sus elementos acepten tablas (JTable) en lugar de texto s...

Guardar reporte PDF directamente con Jasperreports

Guardar reporte PDF directamente con Jasperreports

Guardar un reporte PDF creado en iReport no es tan diferente de solo visualizarlo en pantalla. En este ejemplo se hace u...

Uso del condicional IF

Uso del condicional IF

En este post conocernos lo que son las Estructuras de Control IF en los script de Bash. Estas estructuras nos ayudan a c...

Lectura y edición de metadatos con ExifTool

Lectura y edición de metadatos con ExifTool

En este post te hablaremos sobre una interesante herramienta para le lectura y edición de metadatos que no te debe de fa...

Texto e Imagen en Java2d (Proyecto)

Texto e Imagen en Java2d (Proyecto)

Nivel: Intermedio-Avanzado IDE: Netbeans 6.9 o Sup. Tiempo: 30 minutos En este tutorial crearemos una aplicación que nos...

JSON Web Token para Java y Android

JSON Web Token para Java y Android

Un JSON Web Token es un estandar abierto para la creación de Token de Acceso el cual permite firmar digitalmente informa...

1 comentario en “Matriz de Adyacencia: Representación de grafos en Java”

  1. Giovanni dice:

    Hola amigo muy buena tu pagina y didactica para cualquiera que quiere aprender en el mundo de la programacion,yo estoy en mitad la carrera de ing.informatica y tambien soy orgullosamente Boliviano y creo que aqui en Bolivia tambien se puede hacer cosas innovadoras en el mundo del software solo falta las ganas y actitud saludos desde Santa Cruz de la Sierra

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

JSON es un formato de texto ligero para el intercambio de datos ampliamente usado en los Servicios Web. En este post uti...

En este post conoceremos algunos de los operadores de comparación que existen en Linux y realizaremos unos ejercicios pa...

En este post conocernos lo que son las Estructuras de Control IF en los script de Bash. Estas estructuras nos ayudan a c...

Todo producto tecnológico tiene un ciclo de vida, algunos bastante corto otros muy largo, podemos mencionar el software...

Android Bolivia

MAUS