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.

Respuesta

Acá en este link tienes la solución

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

1 respuesta más de otro experto

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas