当前位置: 高中信息技术 / 综合题
  • 1. (2022·温州模拟) 某弹珠游戏,弹珠从起点到终点需要经过若干节点(不存在绕圈现象,且保证可以到达),但方案可能不唯一。各节点关系如图a所示,例如从起点A到终点H可能的线路有:“A→D→E→F→H”和“A→D→G→H”等。前者需要经过“D→B→F”三个节点:后者需要经过"D→C“两个节点是A到H的所有线路中经过节点数最少的一种。

    用数组存储各节点信息,节点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所示。

    1. (1) 起点为D,终点为F,经过节点数最少的线路图为
    2. (2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

      '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

微信扫码预览、分享更方便