Camino minimo - grafos

      • 2,744
      • mensajes
      • miembro desde
      • 15/07/05
    19/07/2010
    #1 Camino minimo - grafos

    Buenas gente, queria compartir con ustedes el codigo fuente en Java de uno de los algoritmos de grafos para hallar caminos minimos, tiene una implementacion propia de un grafo como una lista de vertices y una lista de aristas y la implementacion del algoritmo Bellman - Ford para caminos minimos que puede ser usado en grafos dirigidos y con peso negativo en sus aristas.

    El codigo es bastante sencillo de seguir y extensible a otros algoritmos mas como el de dijkstra...

    El codigo viene con una clase main que genera un grafo basico y luego por cada vertice dentro del grafo computa la distancia minima al resto de los vertices mostrando el camino minimo y la distancia minima...

    Espero que les sea de utilidad...

    Archivos adjuntados Archivos adjuntados
  1. ¿Este tema te pareció interesante? Compártelo!

    ¿No es lo que buscabas? Intenta buscar un tema similar

    9 comentarios / 12764 Visitas

      • 2,744
      • mensajes
      • miembro desde
      • 15/07/05
    19/07/2010
    #2 Re: Camino minimo - grafos

    Agrego la implementacion del algoritmo de Dijkstra para caminos minimos. Ahora esta implementado el programa principal usando los dos algoritmos Bellman-Ford y Dijkstra sobre el mismo grafo...

    Espero que a alguien le sea util...

    Saludos
    Pablo

    Archivos adjuntados Archivos adjuntados
      • 2,744
      • mensajes
      • miembro desde
      • 15/07/05
    19/07/2010
    #3 Re: Camino minimo - grafos

    Agrego la implementacion del algoritmo Johnson's para el computo del camino minimo entre todos los pares de vertices del grafo, este algoritmo eta basado en la aplicacion el algoritmo de Bellman-Ford y luego aplicarsele Dijkstra sbore cada uno de los vertices como vertice de origen.

    Pueden ver la implementacion...

    Espero que les sea util...

    Saludos
    Pablo

    Archivos adjuntados Archivos adjuntados
      • 3,705
      • mensajes
      • miembro desde
      • 14/10/04
    20/07/2010
    #4 Re: Camino minimo - grafos

    Groso, muchas gracias Pablo!
    Saludos,
    Nacho.-

      • 7,194
      • mensajes
      • miembro desde
      • 27/11/07
    20/07/2010
    #5 Re: Camino minimo - grafos

    Una pregunta: no conozco el algoritmo de Johnson, pero ¿qué ventajas tiene sobre el de Robert Floyd, enormemente simple?

      • 2,744
      • mensajes
      • miembro desde
      • 15/07/05
    21/07/2010
    #6 Re: Camino minimo - grafos
    Cita Escrito por Kryptonyte Ver mensaje
    Una pregunta: no conozco el algoritmo de Johnson, pero ¿qué ventajas tiene sobre el de Robert Floyd, enormemente simple?
    No encontre muchas diferencias yo, el tema que el algoritmo de Floyd - Warshall trabaja sobre una matriz de pesos / distancias iniciales y mediante programacion dinamica va en un orden de O (n^3) calculando todas las distancias minimas entre todos los vertices...

    El algoritmo de Johnsons toma un approach diferente, lo que primero hace es agregar un vertice mas "Q" al grafo y lo conecta con todos los demas nodos mediante aristas de peso 0, luego aplica Bellman-Ford al grafo tomando como nodo inicial a ese vertice "Q", y luego hace una renormalizacion de los pesos / distancias de cada nodo para remover los "pesos negativos", una vez que este proceso termina, se remueve el nodo "Q" del grafo y todas las aristas que conectaban este nodo con el resto, y sobre este grafo ahora se realiza Dijkstra tantas veces como nodos tenga en el grafo, al finalizar obtengo la distancia minima entre cada par de vertices...

    Es un algoritmo sencillo de implementar una vez que tenes implementado Bellman-Ford y Dijkstra...

    Saludos
    Pablo
      • 7,194
      • mensajes
      • miembro desde
      • 27/11/07
    21/07/2010
    #7 Re: Camino minimo - grafos

    Te lo digo porque el algoritmo de Floyd se reduce a:

    procedure FloydWarshall ()
    for k := 1 to n
    for i := 1 to n
    for j := 1 to n
    path[i][j] = min ( path[i][j], path[i][k]+path[k][j] );
    y es O(n^3), lo mismo que el algoritmo de Johnson, tal como lo presentás. Incluso parece más simple aplicar Dijkstra para todos los nodos tomados como origen.
    Así que, como el algoritmo de Floyd es de épocas remotas (en términos de computación), alguna ventaja debería tener el de Johnson.

      • 1
      • mensajes
      • miembro desde
      • 19/06/09
    05/10/2011
    #8 Re: Camino minimo - grafos

    En que suit (entorno de desarrollo) esta escrito el programa?

      • 1
      • mensajes
      • miembro desde
      • 07/10/11
    17/10/2011
    #9 Re: Camino minimo - grafos

    Está en java, está malisimo, mal comentado etc, tengo uno full, que hace realmente lo que debe hacer, creo que lo subiré pronto, hoy no tengo mucho tiempo, saludos

      • 1
      • mensajes
      • miembro desde
      • 04/06/09
    02/07/2012
    #10 Re: Camino minimo - grafos

    bastante interesante como accedo al codigo?, son nuevo en esta pagina