当前位置: 高中信息技术 / 综合题
  • 1. (2021高二下·温州期末) 在某区间内有若干个障碍物,现需找出一个最大的空正方形用于建设方形场地。如图所示,将该区间用网格表示(区间范围m*n,m、n的值均在1-1000之间),障碍物(黑色圆点)位于若干个网点上,障碍物个数及位置随机生成。

    对w*h(10*8)网格数据进行存储,无障碍物的位置对应数组元素数值为0,有障碍物的位置对应数组元素数值为1。数组d中数据初始化后,对应数组元素数值d(2)=1:d(27)=1 :d(33)=1:d(45)=1:d(52)=1:d(57)=1,其他数组元素数值为0。对应最大空正方形的起始位置为3,边长为4。

    找最大空正方形的方法如下:①从当前位置右下角开始逐渐扩大正方形边长,直到有障碍物出现,不能再扩展为止;②取下一个位置,按照步骤①继续查找,最后1列为边界,该位置上无需查找。

    1. (1) 给定7*8网格,有障碍物的位置为d(8)=1:d(18)=1:d(27)=1:d(36)=1:d(52)=1,则对应最大空正方形的起始位置和边长分别为。(注:两个数字之间请用逗号“”,隔开)
    2. (2) 小李根据上述描述,设计了一个查找最大的空正方形起始位置和边长的算法。算法的VB程序如下请在划线处填入合适的代码。

      Const W=10

      Const h=8

      Dim d(1 To w*h)As Integer

      Private Sub Form_Load( )

          ‘数组初始化,无障碍物的位置对应数组元素值为0,有障碍物的位置对应数组元素数值为1

      End Sub

      Private Sub Command l_Click()

          Dim i As Integer,length As Integer,maxw As Integer

          Dim max As Integer

          max=0

          For i=1 To w*h

          If i Mod w <> 0 Then ‘判断该位置是否需要查找

              If length>max Then max =length:maxw=i

          End If

           ‘输出最大空正方形的起始位置和边长,代码略。

      End Sub

      Function scan(k As Integer)As Integer

          Dim j As Integer

          Dim t As Integer,s As Integer

          Dim dw As Integer

          t=1

          Do While k\w+1+t<h And

              s=0

              dw=k+w+1

              For j=1 To t^2

                  s=s+d(dw+w*((j-1)\t)+(j-1)Mod t)

              Next j

              If Then

                  Exit Do     ‘退出循环

              Else

                  t=t+1

              End If

          Loop

          scan=t

      End Function

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