
算法思路如下:
①首先按边距离升序排序;
②找到边距离最小值1,以及相应的两个节点V1 和V3;
③以V1或V3作为起点,搜寻连接新节点且距离最小的边,发现(V1, V4)边最小为4;
④以V1、V3、V4作为起点,搜寻连接新节点且距离最小的边,发现(V4, V5)边最小为2;
⑤以V1、V3、V4、V5作为起点,搜寻连接新节点且距离最小的边,发现(V2, V5)边最小为3;因此可知,连通5个村庄的最短管道距离是1+4+2+3=10,效果如图b所示。
现设计了如下VB程序,界面如图c所示,请回答下列问题:
Const n = 5 '村庄数
Const m = 8 '管道线路数
Dim pointAB(1 To 2 * m) As Integer '存储连接的两个村庄节点
Dim length(1 To m) As Integer '存储两个村庄之间的距离
Dim res(1 To 100) As Integer '存储管道规划结果
Private Sub Form_Load()
'村庄节点数据存储在pointAB数组,两个村庄的距离数据存储在length数组。
'如图c所示,(V1,V3)边距离为1,则pointAB(1)=1,pointAB(2)=3,length(1)=1;
(V1,V2)边距离为6,则pointAB(3)=1,pointAB(4)=2,length(2)=6;其他依次类推,代码略。
End Sub
Function check(x As Integer) As Integer '判断x节点是否已在规划中
check = 0
For i = 1 To 100
If x = res(i) Then check = 1: Exit Function
Next i
End Function
Private Sub Command1_Click()
Dim i As Integer, j As Integer, tmp As Integer
Dim total As Integer, sum As Integer
For i = 1 To m - 1
For j = m To i + 1 Step -1
If Then
tmp= pointAB(2 * j - 1) :pointAB(2 * j - 1) = pointAB(2 * j - 3) :pointAB(2 * j - 3) = tmp
tmp = pointAB(2 * j) : pointAB(2 * j) = pointAB(2 * j - 2) :pointAB(2 * j - 2) = tmp
tmp = length(j): length(j) = length(j - 1): length(j - 1) = tmp
End If
Next j
Next i
'开始规划管道
total = 1
res(1) = pointAB(1): res(2) = pointAB(2)
sum = length(1)
Do While total <
For i = 2 To m
If Then
total = total + 1
res(2 * total - 1) = pointAB(2 * i - 1)
res(2 * total) = pointAB(2 * i)
sum = sum + length(i)
Exit For
End If
Next i
Loop
'输出连通结果res 以及管道总长度sum,代码略。
End Sub
c=“1234”
For i=1 To 4
Print_________
Next
如果要让程序运行后得到如下结果:
1 12 123 1234
则在下划线处应填入的内容为( )。
n = Val(Text1.Text)
For i = 1 To n
a(i) = i
Next i
For i = 1 To n / 2 - 1
For j = n To 2 * (i + 1) Step -2
If Then t = a(j): a(j) = a(j - 2): a(j - 2) = t
Next j
For j = 1 To n - i * 2 - 1 Step 2
If Then t = a(j): a(j) = a(j + 2): a(j + 2) = t
Next j Next i
当n为8时,上述程序段的运行结果a(1)至a(8)的值分别为 1,8,3,6,5,4,7,2,则划线处应填入的代码 分别为( )
n=11:s=“”
key=Val(Text 1.Text)
i=1:j=n
Do While i<j
m=(i+j)\2
If key<a(m) Then
j=m-1
Else
i=m
End If
Loop
Fork=jT on-1
s=s+Str(a(k) )
Next k
Label1.Caption=s
已知数组a(1)到a(10)的原始数据为20,21,28,37,41,51,51,51,66,69,程序运行时,在文本框Text1中输入51,标签Label1中显示的内容是( )
Private Sub Command1Click() Dim y As Integer '用于存储输入的十进制自然数 Dim s As String '用于存储转换后的结果 Dim r As Integer n = Val(Text1.Text) s = "" Do While n <> 0 r = ① '采用除八取余法 s = Str(r) + s '将余数添加到结果s中 n = n \ 8 Loop Label1.caption=s End Sub |
请根据题意将程序补充完整。
下列说法正确的是( )
i = 1: j = 10
Do While i <= j
m = (i + j) \ 2
If key <= a(m) Then
‘①
Else
‘②
End If
Loop
For k = 10 To i Step -1
‘③
Next k
a(i) = key
要使程序实现上述功能,则方框①②③中的语句分别是( )