Hacer el algoritmo de Dijkstra's en VBA

Necesito hacer el Dijkstra's algorithm en Visual Basic, para encontrar el camino más corto entre varios.

2 respuestas

Respuesta
1

Este es un ejemplo del algoritmo va a buscar dentro de los nodos el que tenga la distancia más corta y se saltara al nodo destino, repitiendo la operación

la macro es esta

Sub algoritmo_Dijkstra()
Dim nodos As New Collection
Set datos = Range("b2").CurrentRegion
Set funcion = WorksheetFunction
With datos
    Set datos = .Rows(2).Resize(.Rows.Count - 1)
nodo = 1: X = 1
regresa:
        CUENTA = funcion.CountIf(.Columns(1), nodo)
        If CUENTA = 0 Then
            suma = funcion.Sum(.Columns(.Columns.Count + 1))
            .Cells(.Rows.Count + 2, .Columns.Count + 1) = suma
            .Cells(.Rows.Count + 2, .Columns.Count) = concatena
            .Cells(.Rows.Count + 2, .Columns.Count - 2) = "RUTA MAS CORTA"
         End
        End If
        fila = funcion.Match(nodo, .Columns(1), 0)
        Set ruta = .Rows(fila).Resize(CUENTA, .Columns.Count)
        minimo = funcion.Min(ruta.Columns(3))
        fila2 = funcion.Match(minimo, ruta.Columns(3), 0)
        ruta.Cells(fila2, ruta.Columns.Count + 1) = minimo
        nodo = ruta.Cells(fila2, 2)
        recorrido = ruta.Cells(fila2, 1) & ruta.Cells(fila2, 2)
        If X = 1 Then concatena = recorrido
        If X > 1 Then concatena = concatena & "-" & recorrido
        X = X + 1
        GoTo regresa
End With
End Sub
Respuesta

Acá en este link tienes la solución

http://rosettacode.org/wiki/User:Klever 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas