dim a(10,10),b(100) as long
For i = 1 To 10
    For j = 1 To 10
        a(i, j) = "0"
    Next j
Next i
For k = 1 To 20 '2?à×
10:     a1 = Int(Rnd * 10) + 1
        b1 = Int(Rnd * 10) + 1
        If a(a1, b1) = "0" Then
           a(a1, b1) = "*"
           n = n + 1
        Else
           GoTo 10
        End If
Next k
'éè??à×±?é?μ?êy×?
For n = 2 To 9 '?D???D??
    For t = 2 To 9
        If a(n, t) = "*" Then
           For n1 = n - 1 To n + 1
               For t1 = t - 1 To t + 1
                   If a(n1, t1) <> "*" Then
                      a(n1, t1) = LTrim$(Str$(Val(a(n1, t1)) + 1))
                   End If
               Next t1
           Next n1
        End If
    Next t
Next n
For i = 2 To 9
    If a(1, i) = "*" Then 'μúò?DD?D??
       For j = 1 To 2
           For k = i - 1 To i + 1
               If a(j, k) <> "*" Then
                  a(j, k) = LTrim$(Str$(Val(a(j, k)) + 1))
               End If
           Next k
       Next j
    End If
    If a(10, i) = "*" Then 'μúê?DD?D??
       For j = 9 To 10
           For k = i - 1 To i + 1
               If a(j, k) <> "*" Then
                  a(j, k) = LTrim$(Str$(Val(a(j, k)) + 1))
               End If
           Next k
       Next j
    End If
Next i
For i = 2 To 9
    If a(i, 1) = "*" Then 'μúò?DD£?μúiáD?D??
       For j = i - 1 To i + 1
           For k = 1 To 2
               If a(j, k) <> "*" Then
                  a(j, k) = LTrim$(Str$(Val(a(j, k)) + 1))
               End If
           Next k
       Next j
    End If
    If a(i, 10) = "*" Then 'μúiDD£?μúê?áD?D??
       For j = i - 1 To i + 1
           For k = 9 To 10
               If a(j, k) <> "*" Then
                  a(j, k) = LTrim$(Str$(Val(a(j, k)) + 1))
               End If
           Next k
       Next j
    End If
Next i
'???????D??
If a(1, 1) = "*" Then    'μú1DD£?μú1áDà×?D??
   For i = 1 To 2
       For j = 1 To 2
           If a(i, j) <> "*" Then
              a(i, j) = LTrim$(Str$(Val(a(i, j)) + 1))
           End If
       Next j
   Next i
End If
If a(1, 10) = "*" Then  'μú1DD£?μú10áDà×?D??
   For i = 1 To 2
       For j = 9 To 10
           If a(i, j) <> "*" Then
              a(i, j) = LTrim$(Str$(Val(a(i, j)) + 1))
           End If
       Next j
   Next i
End If
If a(10, 1) = "*" Then  'μú10DD£?μú1áDà×?D??
   For i = 9 To 10
       For j = 1 To 2
           If a(i, j) <> "*" Then
              a(i, j) = LTrim$(Str$(Val(a(i, j)) + 1))
           End If
       Next j
   Next i
End If
If a(10, 10) = "*" Then  'μú10DD£?μú10áDà×?D??
   For i = 9 To 10
       For j = 9 To 10
           If a(i, j) <> "*" Then
              a(i, j) = LTrim$(Str$(Val(a(i, j)) + 1))
           End If
       Next j
   Next i
End If
For i = 1 To 100
    b(i) = a((i - 1) \ 10 + 1, (i - 1) Mod 10 + 1)
Next i布雷为:10*10

解决方案 »

  1.   

    这种布法太复杂了吧?
    我的算法找不着了,
    定义一个M*N大的数组作为雷区
    把数组里都清成0
    然后随机取X个点布雷
    每布下一个点就把这个点设成9,周围八个点,每个加一
    等X个点布好之后就可以了
      

  2.   

    建议你用本人的“跳蚤”算法。1、二维数组可以换算成一维数组。I=Y*W+X;Y=I\W;X=I Mod W2、因为(1)的缘故,地雷的二维分布可以看做是N个值在一维数组的随机分布。3、N个值在一维数组的随机分布可以应用“跳蚤”算法。所谓“跳蚤算法”是这样的:SWAP A(I),A(Int(rnd)*(N+1)) 顺序将第I个(I=0 To N)元素与随机元素交换。这个算法虽然不敢肯定是本人首创,却是一种本人特色算法。另外,还有关于每个点附近有多少雷的算法。普通算法要扫描每个点周围一圈(8点),计算量是点的数量的8倍。而本人有一个“窗口算法”,计算量是点的数量的4倍。而这个算法的更大的意义在于:如果你要计算周围N圈,也是4倍。而通常的算法要用(N*2+1)^2-1次。比如:1圈:8点XXX
    X*X
    XXX2圈:24点XXXXX
    XXXXX
    XX*XX
    XXXXX
    XXXXX不过这个“窗口算法”有点麻烦,这里暂时不好讲清楚。关于跳蚤算法布雷的演示程序,稍后有时间给你写一个出来。
      

  3.   

    KiteGirl(小仙妹) 我认得;以前经常上腾讯bbs ?? 代码质量都不错啊.