Private Sub Command1_Click()
Dim n As Long
Dim i As Long, j As Long
Dim a() As Long
n = CLng(Text1.Text)
ReDim a(1 To n)
For i = 1 To n
a(i) = 1
Next
For i = 2 To n
10:
If a(i) <= n Then
For j = 1 To i - 1
If a(j) = a(i) Or Abs(a(i) - a(j)) = i - j Then a(i) = a(i) + 1: GoTo 10
Next
If i = n Then MsgBox "有解" ''要求多解的话,可以再继续回溯
Else
a(i) = 1
i = i - 1
a(i) = a(i) + 1
If i = 1 Then
If a(i) > n Then MsgBox "无解": Exit Sub
i = 2
End If
GoTo 10
End If
Next
MSFlexGrid1.Rows = 0
MSFlexGrid1.Cols = 0
MSFlexGrid1.Rows = n + 1
MSFlexGrid1.Cols = n + 1
For i = 0 To n
MSFlexGrid1.TextMatrix(0, i) = i
MSFlexGrid1.TextMatrix(i, 0) = i
MSFlexGrid1.ColWidth(i) = 225
Next
For i = 1 To n
MSFlexGrid1.TextMatrix(i, a(i)) = "*"
Next