l 路线每个点只能向右或向下
l 任何一个岔口优先向右走,右侧不通再向下走
l 一条路线中每个点只能走一次,不能重复
算法思路:探路过程中,记录每个坐标到数组lu;遇到岔路口(向右向下都通),则记录路口坐标到数组cha;遇到前方无路时,需要返回到上一个路口,标记路口右侧坐标为0;当前方无路,岔路口数组也退回到0,说明整体不通,否则根据规则走到右下为止,最后输出整体线路坐标。
实现算法的程序如下,运行结果如图所示。
回答下列问题:
Dim a(1 To 50) As Integer
Private Sub Command1_Click()
Dim i As Integer, j As Integer, zb As Integer
Dim cha(1 To 10) As Integer ‘记录一条线路中各个岔路口坐标
Dim lu(1 To 10) As Integer ‘记录路线经过的坐标
zb = 1: j = 0: lu(1) = 1: i = 1
Do While i <= 9 ‘第1个和最后1个固定,中间有9个需要路过的坐标
If zb Mod 6 <> 0 And a(zb + 1) = 1 Then ‘向右畅通
If zb + 6 <= 30 and a(zb + 6) = 1 Then ‘记录岔路口
j = j + 1
End If
zb = zb + 1
i = i + 1
lu(i) = zb
ElseIf zb + 6 <= 30 And a(zb + 6) = 1 Then ‘向下畅通
zb = zb + 6
i = i + 1
lu(i) = zb
Else ‘坐标退回到上一个岔路口
If j = 0 Then Exit Do
Do While lu(i) <> cha(j)
Loop
a(cha(j) + 1) = 0 ‘标记此路口右侧不可用
j = j - 1
End If
End If
Loop
If j = 0 Then
Text1.Text = "没有畅通道路"
Else
For i = 1 To 10
Text1.Text = Text1.Text + Str(lu(i))
Next i
End If
End Sub
Private Sub Form_Load()
End If ‘生成图形矩阵的数组a各个元素,并在列表框显示,代码略
End Sub