.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
N皇后的回溯算法

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

Option Explicit
''N皇后互不攻击问题的回溯算法


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


'*算法实现
'设i-1个皇后已经放好,判断第i个皇后的位置,如果和前面i-1个中的任意一个有攻击,则该皇后向前走一步.
'直到放好为止,如果该行没有位置可放,则表示前i-1个皇后的位置有问题,先将该第i个皇后回到第一列,
'再回溯到第i-1个皇后,将该皇后向前走一步,直到放好为止,如果不行,先将该皇后回一列,再回溯到第i-2个皇后.
'如此,直到所有皇后放好为止.
'---------------------------------------------------------------------------------------------
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
'---------------------------------------------------------------------------------------------

grd.Rows = 0
grd.Cols = 0
grd.Rows = n + 1
grd.Cols = n + 1
For i = 0 To n
    grd.TextMatrix(0, i) = i
    grd.TextMatrix(i, 0) = i
    grd.ColWidth(i) = 225
Next
For i = 1 To n
    grd.TextMatrix(i, a(i)) = "*"
Next

 

End Sub




相关文章

相关软件