对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列为边界,该位置上无需查找。
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