用数组存储各节点信息,节点A、B、C、D、E、R、G、H分别编号为1~8。数值1表示表格中起始节点(第一列)可达到达节点(第一行),数值0表示无法抵达。
到达节点 起始节点 |
A(1) |
B(2) |
C(3) |
D(4) |
E(5) |
F(6) |
G(7) |
H(8) |
A(1) |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
B(2) |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
C(3) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
D(4) |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
E(5) |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
F(6) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
G(7) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
H(8) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
编写VB程序,实现上述功能。运行程序,在列表框List1中显示所有节点信息,在文本框Text1输入起点,文本框Text2中输入终点,单击“查询”按钮Command1,在文本框Text3中显示经过节点数最少的线路图。程序界面如图b所示。
'n是常量,代码略
Dim a(1 To n*n) As Integer
Dim pre(1 To 100) As Integer
Dim q(1 To 100) As Integer
Private Sub Form_ Load()
'读取n*n个节点之间的信息,存储在数组a中,a(i-1)*n+j)=1表示i节点到j节点可达。
End Sub
Private Sub Command1 _Click()
Dim st As Integer, ed As Integer
Dim flag As Boolean, res As String, cur As Integer
Dim tail As Integer, head As Integer
'初始化pre和q数组,代码略。
Text3. Text = ""
st = Asc(Text1. Text) - 64
ed = Asc(Text2. Text) - 64
head=1:tail=2
q(1) = st: flag = False
Do While head <> tail And Not flag
cur = q(head)
head=head+1
tail = qInfo(tail, cur)
If Then flag = True
Loop
If flag Then
res =""
Do While ed <> 0
res = "-->"+ Chr(ed + 64) + res
Loop
Text3.Text = Mid(res, 4)
End If
End Sub
'记录与c节点连通的节点信息
Function qInfo(tail As Integer, c As Integer) As Integer
Dim j As Integer
For j=1 To n
If j <>c Then
If a((c- 1) *n+j) = 1 And pre(j) = 0 Then
q(tail) = j
pre(j) = c
End If
End If
Next j
qInfo = tail
End Function