9. Anexos.

9. Anexos. 9. Anexos.

01.07.2013 Views

If SolucionMST(i).Inactivo = False Then ReDim Preserve Solucion(Tamano) Tamano = Tamano + 1 Solucion(j) = SolucionMST(i) j = j + 1 End If Next i End Sub 9.2.2.3. El algoritmo de Dijkstra. Módulo: Dijkstra.bas Option Explicit Option Base 1 Private Type Reg_L Valor As Long Visto As Boolean End Type Dim Mat_C() As Long Dim Mat_L() As Reg_L Dim NodosAdy() As Lista_Ady Anexos. Public Sub Hallar_CamMin_Dijkstra(ByRef Vector() As Reg_Arcos, NumeroNodos As Long, NodosOrigen() As Long, Solucion() As Reg_Arcos, Origen As Integer) Dim i As Integer, j As Integer Dim D() As Single Calcular_Matriz_Pesos Vector, NumeroNodos, D() Calcular_Adyacentes Vector, NodosAdy, False Dijkstra NodosOrigen(Origen), NumeroNodos, D() Interpreta_MatrizAdy Vector, Solucion, D(), NodosOrigen(Origen) If Origen < UBound(NodosOrigen) Then 34

Else End If Origen = Origen + 1 Origen = 1 End Sub Sub Calcular_Matriz_Pesos(ByRef Vector() As Reg_Arcos, ByVal NumeroNodos As Long, D() As Single) Dim i As Long, j As Long ReDim D(NumeroNodos, NumeroNodos, 3) For i = 1 To UBound(Vector()) If Vector(i).Inactivo = False Then D(Vector(i).Origen, Vector(i).Destino, 1) = Vector(i).Longitud D(Vector(i).Destino, Vector(i).Origen, 1) = Vector(i).Longitud D(Vector(i).Origen, Vector(i).Destino, 3) = i D(Vector(i).Destino, Vector(i).Origen, 3) = i End If Next For i = 1 To NumeroNodos - 1 For j = i + 1 To NumeroNodos If D(i, j, 3) = 0 Then D(i, j, 1) = Exp(16) D(j, i, 1) = Exp(16) End If Next Next End Sub Anexos. Public Sub Calcular_Adyacentes(ByRef Vector() As Reg_Arcos, ByRef NodosAdy() As Lista_Ady, ByVal CalcularPosicion As Boolean) Dim j As Long ReDim NodosAdy(NumeroNodos) For j = 1 To UBound(Vector) NodosAdy(Vector(j).Origen).numero = NodosAdy(Vector(j).Origen).numero + 1 ReDim Preserve NodosAdy(Vector(j).Origen).Mady(NodosAdy(Vector(j).Origen).numero) NodosAdy(Vector(j).Origen).Mady(NodosAdy(Vector(j).Origen).numero).Nodo = Vector(j).Destino 35

Else<br />

End If<br />

Origen = Origen + 1<br />

Origen = 1<br />

End Sub<br />

Sub Calcular_Matriz_Pesos(ByRef Vector() As Reg_Arcos, ByVal NumeroNodos As Long, D() As Single)<br />

Dim i As Long, j As Long<br />

ReDim D(NumeroNodos, NumeroNodos, 3)<br />

For i = 1 To UBound(Vector())<br />

If Vector(i).Inactivo = False Then<br />

D(Vector(i).Origen, Vector(i).Destino, 1) = Vector(i).Longitud<br />

D(Vector(i).Destino, Vector(i).Origen, 1) = Vector(i).Longitud<br />

D(Vector(i).Origen, Vector(i).Destino, 3) = i<br />

D(Vector(i).Destino, Vector(i).Origen, 3) = i<br />

End If<br />

Next<br />

For i = 1 To NumeroNodos - 1<br />

For j = i + 1 To NumeroNodos<br />

If D(i, j, 3) = 0 Then<br />

D(i, j, 1) = Exp(16)<br />

D(j, i, 1) = Exp(16)<br />

End If<br />

Next<br />

Next<br />

End Sub<br />

<strong>Anexos</strong>.<br />

Public Sub Calcular_Adyacentes(ByRef Vector() As Reg_Arcos, ByRef NodosAdy() As Lista_Ady, ByVal<br />

CalcularPosicion As Boolean)<br />

Dim j As Long<br />

ReDim NodosAdy(NumeroNodos)<br />

For j = 1 To UBound(Vector)<br />

NodosAdy(Vector(j).Origen).numero = NodosAdy(Vector(j).Origen).numero + 1<br />

ReDim Preserve NodosAdy(Vector(j).Origen).Mady(NodosAdy(Vector(j).Origen).numero)<br />

NodosAdy(Vector(j).Origen).Mady(NodosAdy(Vector(j).Origen).numero).Nodo = Vector(j).Destino<br />

35

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!