某地区有8个城市爆发疫情,需要发放救援物资。各城市的相邻关系用0表示不相邻,1表示相邻。例如:图a的邻接矩阵对应关系图如图b所示。
救援物资一共有4种(第1种口罩、第2种酒精、第3种防护服、第4种耳温枪),每个城市仅能分配到1种物资,要求相邻城市所分配到的救援物资各不相同。 算法分析:采用试探法分配物资(每个城市都从第1种物资开始逐个试探)。 第i个城市能否分配第c种物资,关键取决于第i个城市的周边是否有分配到相同物资的城市。如果已有相邻城市分配到第c种物资,则换第c+1种物资,否则就将第c种物资分配给第i个城市,继续探索第i+1个城市。 如果第i个城市,4种物资都无法分配到,则退回到第i-1个城市,调整第i-1个城市的物资,重新试探下一种物资。直至所有城市的救援物资都分配好。 例如:给城市1分配第1种物资,然后给第2个城市分配物资时,也从第1种物资开始试探,若发现第1种物资已分配给相邻城市,则试探第2种物资,以此类推。 小金同学编写VB程序实现上述功能:程序运行时,各城市之间相邻关系矩阵显示在列表框List1中。单击“分配”按钮Command1,在列表框List2中显示物资分配方案。程序运行界面如图c所示,请回答下列问题。 图c
(1)
若按照上述算法,8个城市的相邻关系矩阵图如图 a、图 b所示,则城市 8所分配到的物资是(填:口罩/酒精/防护服/耳温枪)
(2)
实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private Sub Command1_Click()
Const n = 8
Dim a(1 To n * n) As Integer, t(1 To n) As Integer,
Dim w(1 To 4) As String Dim c
As Integer, i As Integer, j As
Integer,Dim f As Boolean
w(1) = "口罩": w(2) = "酒精": w(3) =
"防护服": w(4) = "耳温枪"
‘读取8个城市的邻接矩阵对应关系,存入a数组中,并显示在列表框List1中,代码略
c = 1 t(1) = c i = 2
Do While
For j = 1 To
i - 1
If Then
Exit For
End If
Next j
If j < i Then
c = c + 1
Do While c > 4
i = i - 1
If i = 0 Then
List2.AddItem "no answer"
Exit Sub
End If
c =
Loop
Else
t(i) = c
i = i + 1
c = 1
End If
Loop
List2.Clear
For i = 1 To n
List2.AddItem "城市" & i & ":" & w(t(i))
Next i
End Sub
答案: 【1】酒精
【1】c <= 4 And i <= n 或i <= n【2】a((j - 1) * n + i) = 1 And t(j) = c (2 分) 或 a((i - 1) * n + j) = 1 And t(j) = c【3】t(i) + 1