📄 form4.frm
字号:
Next js
'定义原始数据
Dim a(12, 12) As Integer
For i = 1 To 12
For j = 1 To 12
a(i, j) = MAX
Next j
Next i
a(1, 2) = 5
a(2, 1) = 5
a(1, 6) = 4
a(6, 1) = 4
a(1, 7) = 3
a(7, 1) = 3
a(2, 3) = 2
a(3, 2) = 2
a(3, 4) = 2
a(4, 3) = 2
a(3, 5) = 4
a(5, 3) = 4
a(5, 10) = 6
a(10, 5) = 6
a(6, 7) = 5
a(7, 6) = 5
a(6, 8) = 3
a(8, 6) = 3
a(7, 8) = 4
a(8, 7) = 4
a(7, 11) = 2
a(11, 7) = 2
a(7, 12) = 2
a(12, 7) = 2
a(8, 9) = 3
a(9, 8) = 3
a(9, 10) = 3
a(10, 9) = 3
a(10, 11) = 1
a(11, 10) = 1
'两点间最短距离算法
Select Case Form1.Text2.Text
Case Is = "大门"
n = 1
Case Is = "食堂"
n = 2
Case Is = "图书馆"
n = 3
Case Is = "滨河公园"
n = 4
Case Is = "宿舍楼"
n = 5
Case Is = "报告厅"
n = 6
Case Is = "喷泉"
n = 7
Case Is = "教学楼"
n = 8
Case Is = "商店"
n = 9
Case Is = "运动场"
n = 10
Case Is = "实验楼"
n = 11
Case Is = "物理实验楼"
n = 12
End Select
Select Case Form1.Text3.Text
Case Is = "大门"
m = 1
Case Is = "食堂"
m = 2
Case Is = "图书馆"
m = 3
Case Is = "滨河公园"
m = 4
Case Is = "宿舍楼"
m = 5
Case Is = "报告厅"
m = 6
Case Is = "喷泉"
m = 7
Case Is = "教学楼"
m = 8
Case Is = "商店"
m = 9
Case Is = "运动场"
m = 10
Case Is = "实验楼"
m = 11
Case Is = "物理实验楼"
m = 12
End Select
drawline(1) = n
Dim jingguo(1 To 12, 1 To 11) As Integer '跟踪记录关键行产生是的经过点
For i = 1 To 12
For j = 1 To 11
jingguo(i, j) = MAX
Next j
Next i
For i = 1 To 12
jingguo(i, 1) = 0 '0作为记录尾的标志
Next i
For i = 1 To 12 '转移关键行数值
dist(i) = a(n, i)
s(i) = 0
Next i
s(n) = 1 '去处起始点
For i = 1 To 12
min_dist = MAX
For j = 1 To 12 '取得关键行最小值
If s(j) = 0 And dist(j) < min_dist Then
u = j
min_dist = dist(j)
End If
Next j
s(u) = 1
For j = 1 To 12
If s(j) = 0 Then
dis = dist(u) + a(u, j)
If dis > dist(j) Then
dist(j) = dist(j)
Else: dist(j) = dis
For k = 1 To 11
jingguo(j, k) = jingguo(u, k)
If jingguo(j, k) = 0 Then
jingguo(j, k) = u
jingguo(j, k + 1) = 0
GoTo loop1
End If
Next k
End If
loop1: End If
Next j
Next i
Text1.Text = Form1.Text2.Text
i = 1
js = 2
Do While jingguo(m, i) > 0
Select Case jingguo(m, i)
Case Is = 1
Text1.Text = Text1.Text & "-->" & "大门"
drawline(js) = 1
js = js + 1
Case Is = 2
Text1.Text = Text1.Text & "-->" & "食堂"
drawline(js) = 2
js = js + 1
Case Is = 3
Text1.Text = Text1.Text & "-->" & "图书馆"
drawline(js) = 3
js = js + 1
Case Is = 4
Text1.Text = Text1.Text & "-->" & "滨河公园"
drawline(js) = 4
js = js + 1
Case Is = 5
Text1.Text = Text1.Text & "-->" & "宿舍楼"
drawline(js) = 5
js = js + 1
Case Is = 6
Text1.Text = Text1.Text & "-->" & "报告厅"
drawline(js) = 6
js = js + 1
Case Is = 7
Text1.Text = Text1.Text & "-->" & "喷泉"
drawline(js) = 7
js = js + 1
Case Is = 8
Text1.Text = Text1.Text & "-->" & "教学楼"
drawline(js) = 8
js = js + 1
Case Is = 9
Text1.Text = Text1.Text & "-->" & "商店"
drawline(js) = 9
js = js + 1
Case Is = 10
Text1.Text = Text1.Text & "-->" & "运动场"
drawline(js) = 10
js = js + 1
Case Is = 11
Text1.Text = Text1.Text & "-->" & "实验楼"
drawline(js) = 11
js = js + 1
Case Is = 12
Text1.Text = Text1.Text & "-->" & "物理实验楼"
drawline(js) = 12
js = js + 1
End Select
i = i + 1
Loop
Text1.Text = Text1.Text & "-->" & Form1.Text3.Text
Text1.Text = Text1.Text & Chr(13) + Chr(10) + "总路程为:" & dist(m) * 40 & "米"
'在主窗口画出路径
Form1.Picture1.Cls
drawline(js) = m
js = 1
Do While drawline(js) > 0
If drawline(js) = 1 Then
Select Case drawline(js + 1)
Case Is = 2
Form1.Picture1.Line (Form1.Label11.Left - 300, Form1.Label11.Top - 130)-(Form1.Label10.Left + 200, Form1.Label10.Top - 150)
Form1.Picture1.Line (Form1.Label10.Left + 200, Form1.Label10.Top - 150)-(Form1.Label10.Left + 300, Form1.Label10.Top - 250)
Form1.Picture1.Line (Form1.Label10.Left + 200, Form1.Label10.Top - 150)-(Form1.Label10.Left + 300, Form1.Label10.Top - 50)
Case Is = 6
Form1.Picture1.Line (Form1.Label11.Left - 300, Form1.Label11.Top - 130)-(Form1.Label12.Left - 100, Form1.Label12.Top + 100)
Form1.Picture1.Line (Form1.Label12.Left - 100, Form1.Label12.Top + 100)-(Form1.Label12.Left - 200, Form1.Label12.Top + 200)
Form1.Picture1.Line (Form1.Label12.Left - 100, Form1.Label12.Top + 100)-(Form1.Label12.Left - 200, Form1.Label12.Top)
Case Is = 7
Form1.Picture1.Line (Form1.Label11.Left - 300, Form1.Label11.Top - 130)-(Form1.Label15.Left + 60, Form1.Label15.Top)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left + 200, Form1.Label15.Top + 150)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left - 80, Form1.Label15.Top + 150)
End Select
ElseIf drawline(js) = 2 Then
Select Case drawline(js + 1)
Case Is = 1
Form1.Picture1.Line (Form1.Label10.Left + 200, Form1.Label10.Top - 150)-(Form1.Label11.Left - 300, Form1.Label11.Top - 130)
Form1.Picture1.Line (Form1.Label11.Left - 300, Form1.Label11.Top - 130)-(Form1.Label11.Left - 400, Form1.Label11.Top - 30)
Form1.Picture1.Line (Form1.Label11.Left - 300, Form1.Label11.Top - 130)-(Form1.Label11.Left - 400, Form1.Label11.Top - 230)
Case Is = 3
Form1.Picture1.Line (Form1.Label10.Left + 200, Form1.Label10.Top - 150)-(Form1.Label13.Left + 550, Form1.Label13.Top - 160)
Form1.Picture1.Line (Form1.Label13.Left + 550, Form1.Label13.Top - 160)-(Form1.Label13.Left + 450, Form1.Label13.Top - 60)
Form1.Picture1.Line (Form1.Label13.Left + 550, Form1.Label13.Top - 160)-(Form1.Label13.Left + 650, Form1.Label13.Top - 60)
End Select
ElseIf drawline(js) = 3 Then
Select Case drawline(js + 1)
Case Is = 4
Form1.Picture1.Line (Form1.Label13.Left + 550, Form1.Label13.Top - 160)-(Form1.Label16.Left + 500, Form1.Label16.Top + 500)
Form1.Picture1.Line (Form1.Label16.Left + 500, Form1.Label16.Top + 500)-(Form1.Label16.Left + 600, Form1.Label16.Top + 400)
Form1.Picture1.Line (Form1.Label16.Left + 500, Form1.Label16.Top + 500)-(Form1.Label16.Left + 600, Form1.Label16.Top + 600)
Case Is = 2
Form1.Picture1.Line (Form1.Label13.Left + 550, Form1.Label13.Top - 160)-(Form1.Label10.Left + 200, Form1.Label10.Top - 150)
Form1.Picture1.Line (Form1.Label10.Left + 200, Form1.Label10.Top - 150)-(Form1.Label10.Left + 100, Form1.Label10.Top - 250)
Form1.Picture1.Line (Form1.Label10.Left + 200, Form1.Label10.Top - 150)-(Form1.Label10.Left + 300, Form1.Label10.Top - 250)
Case Is = 5
Form1.Picture1.Line (Form1.Label13.Left + 550, Form1.Label13.Top - 160)-(Form1.Label14.Left + 450, Form1.Label14.Top + 590)
Form1.Picture1.Line (Form1.Label14.Left + 450, Form1.Label14.Top + 590)-(Form1.Label14.Left + 350, Form1.Label14.Top + 690)
Form1.Picture1.Line (Form1.Label14.Left + 450, Form1.Label14.Top + 590)-(Form1.Label14.Left + 550, Form1.Label14.Top + 690)
End Select
ElseIf drawline(js) = 4 Then
Select Case drawline(js + 1)
Case Is = 3
Form1.Picture1.Line (Form1.Label16.Left + 500, Form1.Label16.Top + 500)-(Form1.Label13.Left + 550, Form1.Label13.Top - 160)
Form1.Picture1.Line (Form1.Label13.Left + 550, Form1.Label13.Top - 160)-(Form1.Label13.Left + 450, Form1.Label13.Top - 60)
Form1.Picture1.Line (Form1.Label13.Left + 550, Form1.Label13.Top - 160)-(Form1.Label13.Left + 450, Form1.Label13.Top - 260)
End Select
ElseIf drawline(js) = 5 Then
Select Case drawline(js + 1)
Case Is = 10
Form1.Picture1.Line (Form1.Label14.Left + 450, Form1.Label14.Top + 590)-(Form1.Label5.Left + 370, Form1.Label5.Top + 450)
Form1.Picture1.Line (Form1.Label5.Left + 370, Form1.Label5.Top + 450)-(Form1.Label5.Left + 270, Form1.Label5.Top + 350)
Form1.Picture1.Line (Form1.Label5.Left + 370, Form1.Label5.Top + 450)-(Form1.Label5.Left + 270, Form1.Label5.Top + 550)
Case Is = 3
Form1.Picture1.Line (Form1.Label14.Left + 450, Form1.Label14.Top + 590)-(Form1.Label13.Left + 550, Form1.Label13.Top - 160)
Form1.Picture1.Line (Form1.Label13.Left + 550, Form1.Label13.Top - 160)-(Form1.Label13.Left + 450, Form1.Label13.Top - 260)
Form1.Picture1.Line (Form1.Label13.Left + 550, Form1.Label13.Top - 160)-(Form1.Label13.Left + 650, Form1.Label13.Top - 260)
End Select
ElseIf drawline(js) = 6 Then
Select Case drawline(js + 1)
Case Is = 1
Form1.Picture1.Line (Form1.Label12.Left - 100, Form1.Label12.Top + 100)-(Form1.Label11.Left - 300, Form1.Label11.Top - 130)
Form1.Picture1.Line (Form1.Label11.Left - 300, Form1.Label11.Top - 130)-(Form1.Label11.Left - 200, Form1.Label11.Top - 230)
Form1.Picture1.Line (Form1.Label11.Left - 300, Form1.Label11.Top - 130)-(Form1.Label11.Left - 200, Form1.Label11.Top - 30)
Case Is = 7
Form1.Picture1.Line (Form1.Label12.Left + 200, Form1.Label12.Top - 120)-(Form1.Label15.Left + 60, Form1.Label15.Top)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left + 260, Form1.Label15.Top - 30)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left + 200, Form1.Label15.Top + 230)
Case Is = 8
Form1.Picture1.Line (Form1.Label12.Left + 200, Form1.Label12.Top - 100)-(Form1.Label8.Left + 680, Form1.Label8.Top + 600)
Form1.Picture1.Line (Form1.Label8.Left + 680, Form1.Label8.Top + 600)-(Form1.Label8.Left + 580, Form1.Label8.Top + 700)
Form1.Picture1.Line (Form1.Label8.Left + 680, Form1.Label8.Top + 600)-(Form1.Label8.Left + 780, Form1.Label8.Top + 700)
End Select
ElseIf drawline(js) = 7 Then
Select Case drawline(js + 1)
Case Is = 1
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label11.Left - 300, Form1.Label11.Top - 130)
Form1.Picture1.Line (Form1.Label11.Left - 300, Form1.Label11.Top - 130)-(Form1.Label11.Left - 200, Form1.Label11.Top - 230)
Form1.Picture1.Line (Form1.Label11.Left - 300, Form1.Label11.Top - 130)-(Form1.Label11.Left - 400, Form1.Label11.Top - 230)
Case Is = 6
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label12.Left + 200, Form1.Label12.Top - 120)
Form1.Picture1.Line (Form1.Label12.Left + 200, Form1.Label12.Top - 120)-(Form1.Label12.Left + 100, Form1.Label12.Top - 80)
Form1.Picture1.Line (Form1.Label12.Left + 200, Form1.Label12.Top - 120)-(Form1.Label12.Left + 130, Form1.Label12.Top - 240)
Case Is = 8
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label8.Left + 300, Form1.Label8.Top + 550)
Form1.Picture1.Line (Form1.Label8.Left + 300, Form1.Label8.Top + 550)-(Form1.Label8.Left + 200, Form1.Label8.Top + 450)
Form1.Picture1.Line (Form1.Label8.Left + 300, Form1.Label8.Top + 550)-(Form1.Label8.Left + 200, Form1.Label8.Top + 650)
Case Is = 11
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label7.Left + 300, Form1.Label7.Top + 250)
Form1.Picture1.Line (Form1.Label7.Left + 300, Form1.Label7.Top + 250)-(Form1.Label7.Left + 200, Form1.Label7.Top + 350)
Form1.Picture1.Line (Form1.Label7.Left + 300, Form1.Label7.Top + 250)-(Form1.Label7.Left + 400, Form1.Label7.Top + 350)
Case Is = 12
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label9.Left + 400, Form1.Label9.Top + 850)
Form1.Picture1.Line (Form1.Label9.Left + 400, Form1.Label9.Top + 850)-(Form1.Label9.Left + 500, Form1.Label9.Top + 750)
Form1.Picture1.Line (Form1.Label9.Left + 400, Form1.Label9.Top + 850)-(Form1.Label9.Left + 500, Form1.Label9.Top + 950)
End Select
ElseIf drawline(js) = 8 Then
Select Case drawline(js + 1)
Case Is = 6
Form1.Picture1.Line (Form1.Label8.Left + 680, Form1.Label8.Top + 600)-(Form1.Label12.Left + 200, Form1.Label12.Top - 100)
Form1.Picture1.Line (Form1.Label12.Left + 200, Form1.Label12.Top - 100)-(Form1.Label12.Left + 100, Form1.Label12.Top - 200)
Form1.Picture1.Line (Form1.Label12.Left + 200, Form1.Label12.Top - 100)-(Form1.Label12.Left + 300, Form1.Label12.Top - 200)
Case Is = 7
Form1.Picture1.Line (Form1.Label8.Left + 300, Form1.Label8.Top + 550)-(Form1.Label15.Left + 60, Form1.Label15.Top)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left + 260, Form1.Label15.Top + 50)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left + 160, Form1.Label15.Top - 150)
Case Is = 9
Form1.Picture1.Line (Form1.Label8.Left + 680, Form1.Label8.Top + 600)-(Form1.Label6.Left + 550, Form1.Label6.Top + 580)
Form1.Picture1.Line (Form1.Label6.Left + 550, Form1.Label6.Top + 580)-(Form1.Label6.Left + 450, Form1.Label6.Top + 680)
Form1.Picture1.Line (Form1.Label6.Left + 550, Form1.Label6.Top + 580)-(Form1.Label6.Left + 650, Form1.Label6.Top + 680)
End Select
ElseIf drawline(js) = 9 Then
Select Case drawline(js + 1)
Case Is = 8
Form1.Picture1.Line (Form1.Label6.Left + 550, Form1.Label6.Top + 580)-(Form1.Label8.Left + 680, Form1.Label8.Top + 600)
Form1.Picture1.Line (Form1.Label8.Left + 680, Form1.Label8.Top + 600)-(Form1.Label8.Left + 580, Form1.Label8.Top + 500)
Form1.Picture1.Line (Form1.Label8.Left + 680, Form1.Label8.Top + 600)-(Form1.Label8.Left + 780, Form1.Label8.Top + 500)
Case Is = 10
Form1.Picture1.Line (Form1.Label6.Left + 550, Form1.Label6.Top + 580)-(Form1.Label5.Left + 370, Form1.Label5.Top + 450)
Form1.Picture1.Line (Form1.Label5.Left + 370, Form1.Label5.Top + 450)-(Form1.Label5.Left + 470, Form1.Label5.Top + 350)
Form1.Picture1.Line (Form1.Label5.Left + 370, Form1.Label5.Top + 450)-(Form1.Label5.Left + 470, Form1.Label5.Top + 550)
End Select
ElseIf drawline(js) = 10 Then
Select Case drawline(js + 1)
Case Is = 5
Form1.Picture1.Line (Form1.Label5.Left + 370, Form1.Label5.Top + 450)-(Form1.Label14.Left + 450, Form1.Label14.Top + 590)
Form1.Picture1.Line (Form1.Label14.Left + 450, Form1.Label14.Top + 590)-(Form1.Label14.Left + 550, Form1.Label14.Top + 490)
Form1.Picture1.Line (Form1.Label14.Left + 450, Form1.Label14.Top + 590)-(Form1.Label14.Left + 550, Form1.Label14.Top + 690)
Case Is = 11
Form1.Picture1.Line (Form1.Label5.Left + 370, Form1.Label5.Top + 450)-(Form1.Label7.Left + 250, Form1.Label7.Top - 20)
Form1.Picture1.Line (Form1.Label7.Left + 250, Form1.Label7.Top - 20)-(Form1.Label7.Left + 150, Form1.Label7.Top - 120)
Form1.Picture1.Line (Form1.Label7.Left + 250, Form1.Label7.Top - 20)-(Form1.Label7.Left + 350, Form1.Label7.Top - 120)
Case Is = 9
Form1.Picture1.Line (Form1.Label5.Left + 370, Form1.Label5.Top + 450)-(Form1.Label6.Left + 550, Form1.Label6.Top + 580)
Form1.Picture1.Line (Form1.Label6.Left + 550, Form1.Label6.Top + 580)-(Form1.Label6.Left + 450, Form1.Label6.Top + 480)
Form1.Picture1.Line (Form1.Label6.Left + 550, Form1.Label6.Top + 580)-(Form1.Label6.Left + 450, Form1.Label6.Top + 680)
End Select
ElseIf drawline(js) = 11 Then
Select Case drawline(js + 1)
Case Is = 10
Form1.Picture1.Line (Form1.Label7.Left + 250, Form1.Label7.Top - 20)-(Form1.Label5.Left + 370, Form1.Label5.Top + 450)
Form1.Picture1.Line (Form1.Label5.Left + 370, Form1.Label5.Top + 450)-(Form1.Label5.Left + 270, Form1.Label5.Top + 550)
Form1.Picture1.Line (Form1.Label5.Left + 370, Form1.Label5.Top + 450)-(Form1.Label5.Left + 470, Form1.Label5.Top + 550)
Case Is = 7
Form1.Picture1.Line (Form1.Label7.Left + 300, Form1.Label7.Top + 250)-(Form1.Label15.Left + 60, Form1.Label15.Top)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left + 160, Form1.Label15.Top - 150)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left - 40, Form1.Label15.Top - 150)
End Select
ElseIf drawline(js) = 12 Then
Select Case drawline(js + 1)
Case Is = 7
Form1.Picture1.Line (Form1.Label9.Left + 400, Form1.Label9.Top + 850)-(Form1.Label15.Left + 60, Form1.Label15.Top)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left - 100, Form1.Label15.Top + 100)
Form1.Picture1.Line (Form1.Label15.Left + 60, Form1.Label15.Top)-(Form1.Label15.Left - 100, Form1.Label15.Top - 100)
End Select
End If
js = js + 1
Loop
End Sub
Private Sub Command3_Click()
Unload Form4
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -