?? ospf.frm
字號:
VERSION 5.00
Begin VB.Form frmOSPF
Caption = "最短路徑選擇"
ClientHeight = 4650
ClientLeft = 3360
ClientTop = 2910
ClientWidth = 7170
Icon = "OSPF.frx":0000
LinkTopic = "Form2"
LockControls = -1 'True
ScaleHeight = 4650
ScaleWidth = 7170
Begin VB.TextBox Text1
Height = 3375
Left = 240
MultiLine = -1 'True
ScrollBars = 2 'Vertical
TabIndex = 5
Top = 1080
Width = 6735
End
Begin VB.CommandButton Command1
Caption = "打印最短路線"
Height = 495
Left = 4320
TabIndex = 4
Top = 360
Width = 2055
End
Begin VB.ComboBox Combo2
Height = 300
Left = 1680
TabIndex = 2
Text = "終點站"
Top = 600
Width = 1215
End
Begin VB.ComboBox Combo1
Height = 300
Left = 240
TabIndex = 1
Text = "起訖站"
Top = 600
Width = 1215
End
Begin VB.Label Label2
AutoSize = -1 'True
Caption = "終點站:"
Height = 180
Left = 1800
TabIndex = 3
Top = 240
Width = 720
End
Begin VB.Label Label1
AutoSize = -1 'True
Caption = "起訖站:"
Height = 180
Left = 240
TabIndex = 0
Top = 240
Width = 720
End
End
Attribute VB_Name = "frmOSPF"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim start, ends As Long
Dim JLH(1 To 300), LJD(1 To 300, 1 To 4), DST(1 To 300, 1 To 4) As Long
Dim BH(1 To 300), ADD(1 To 300) As String
Dim n As Integer
Dim vertexnum As Integer
Dim edgenum As Integer
Const max = 100000
Dim graph(0 To 300, 0 To 300) As Long
Dim visited(0 To 300) As Integer
Dim path(0 To 300) As Integer
Dim distance(0 To 90000) As Long
Private Function dijkstra(begin As Integer)
Dim minedge, vertex, i, j, n, m, edges As Integer
edges = 1
visited(begin) = 1
For i = 1 To vertexnum
distance(i) = graph(begin, i)
' Debug.Print distance(i)
Next i
distance(begin) = 0
While (edges < vertexnum - 1)
edges = edges + 1
minedge = max
For j = 1 To vertexnum
If visited(j) = 0 And minedge > distance(j) Then
vertex = j
minedge = distance(j)
End If
Next j
visited(vertex) = 1
For n = 1 To vertexnum
If visited(n) = 0 And (distance(vertex) + graph(vertex, n)) < distance(n) Then
distance(n) = distance(vertex) + graph(vertex, n)
path(n) = vertex
End If
Next
Wend
End Function
Private Sub Command1_Click()
Dim i, j As Integer
Dim k As Integer
Dim addname(1 To 100) As String
Text1 = ""
If start = 0 Or ends = 0 Then
MsgBox "請選擇起始站與終點站"
Exit Sub
End If
For i = 1 To vertexnum
visited(i) = 0
path(i) = 1
Next
dijkstra (start)
Text1 = "起訖站:" & ADD(start) & " --> " & "終點站:" & ADD(ends) & vbCrLf
Text1 = Text1 & vbCrLf
If distance(ends) = max Then
Text1 = Text1 & "兩站點間沒有可聯接的路線!"
Exit Sub
Else
Text1 = Text1 & "它們之間的距離為: " & distance(ends) * 0.1 & " Km" & vbCrLf
Text1 = Text1 & vbCrLf
Text1 = Text1 & "它們之間的最短路線為:" & vbCrLf
Text1 = Text1 & vbCrLf
Text1 = Text1 & ADD(start)
End If
k = ends
j = 1
Do
addname(j) = ADD(k)
k = path(k)
j = j + 1
Loop While (k <> 1)
For j = j - 1 To 1 Step -1
Text1 = Text1 & "--> " & addname(j)
Next j
End Sub
Private Sub Form_Initialize()
Dim i, j, k As Long
Dim filename As String
Dim buffers As String
On Error Resume Next
filename = App.path + "\" + "Add_Dst" + ".txt"
Open filename For Input As #1
If LOF(1) = 0 Then
MsgBox "The lenth of the file is zero! Please Select it asgain。" & vbCrLf & "The file name is Add_Dst。"
Exit Sub
End If
i = 1
Do While Not EOF(1)
Line Input #1, buffers
BH(i) = Val(Mid$(buffers, 1, 3))
ADD(i) = Mid$(buffers, 4, 4)
Combo1.AddItem ADD(i)
Combo2.AddItem ADD(i)
LJD(i, 1) = Val(Mid$(buffers, 8, 3)) '鄰接點的編號
DST(i, 1) = Val(Mid$(buffers, 11, 2)) '與鄰接點之間的距離
LJD(i, 2) = Val(Mid$(buffers, 13, 3))
DST(i, 2) = Val(Mid$(buffers, 16, 2))
LJD(i, 3) = Val(Mid$(buffers, 18, 3))
DST(i, 3) = Val(Mid$(buffers, 21, 2))
LJD(i, 4) = Val(Mid$(buffers, 24, 3))
DST(i, 4) = Val(Mid$(buffers, 27, 2))
Kill buffers
i = i + 1
Loop
n = i - 1
' Debug.Print n
Close #1
vertexnum = n '設置圖的頂點數
edgenum = 0
For i = 1 To n
For j = 1 To 4
If LJD(i, j) = 0 Then Exit For
edgenum = edgenum + 1 '獲得圖的邊數
graph(i, LJD(i, j)) = DST(i, j) '從i點與其鄰接點LJD(i,j)的距離
Next
Next
For i = 0 To n
For j = 0 To n
If graph(i, j) = 0 Then
graph(i, j) = max
End If
Next
Next
End Sub
Private Sub Combo1_click()
start = Combo1.ListIndex + 1 '獲得起訖站的編號
End Sub
Private Sub Combo2_click()
ends = Combo2.ListIndex + 1 '獲得終點站的編號
End Sub
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -