转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
利用VB解决华容道问题的源代码         ★★★★

利用VB解决华容道问题的源代码

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2872 更新时间:2009/4/23 15:42:02
sp;  ES(id) = ES(id) + 1: ES(11) = ES(11) -
1: ES(12) = ES(12) - 1
            MoveVtiger = 0: GoTo Sort
        End If
End Select
Sort:
    If MoveVtiger = 0 Then
        SortEnd hnum + 2, 6      ''''竖放将领排序
        SortEnd 11, 12           ''''空格排序
    End If
End Function



CHRDSave 保存已经走过的节点记录类


Option Explicit
Dim SaveState(1 To 300000) As HRDState ''''最多走3万步
Public iCurrentNum As Long  ''''当前位置的指针
Private Function IsExist(NewState() As Long, ilevel As Long) As Boolean
IsExist = False
Dim i As Long
For i = iCurrentNum To 1 Step -1
    If SaveState(i).Level < ilevel - 2 Then
        i = 0: Exit Function
    End If
    If SaveState(i).state(1) = NewState(1) And _
        SaveState(i).state(2) = NewState(2) And _
        SaveState(i).state(3) = NewState(3) And _
        SaveState(i).state(4) = NewState(4) And _
        SaveState(i).state(5) = NewState(5) And _
        SaveState(i).state(6) = NewState(6) And _
        SaveState(i).state(7) = NewState(7) And _
        SaveState(i).state(8) = NewState(8) And _
        SaveState(i).state(9) = NewState(9) And _
        SaveState(i).state(10) = NewState(10) Then
    IsExist = True: i = 0: Exit Function
    End If
Next i
End Function
Public Sub AddState(NewState() As Long, isuperid As Long, ilevel As Long)
Dim i As Long
    If Not IsExist(NewState, ilevel) Then
       iCurrentNum = iCurrentNum + 1
        For i = 1 To 12
            SaveState(iCurrentNum).state(i) = NewState(i)
        Next
        SaveState(iCurrentNum).Superid = isuperid
        SaveState(iCurrentNum).Level = ilevel
    End If
End Sub
Private Sub Class_Initialize()
    iCurrentNum = 0
End Sub
Public Function GetState(id As Long)
If id > 0 Then
   G_State = SaveState(id)
End If
End Function



主界面窗体的代码


Private Sub ShowId(id As Long, deep As Long)
  Label1.Caption = "节点数:" & CStr(id) & " 测试深度:" & CStr(deep)
End Sub
Private Function isvalid(state() As Long, ByVal hnum As Long)
Dim bs(1 To 20) As Integer
Dim i As Integer
Dim k As Integer
''''init
For i = 1 To 20
    bs(i) = 1
Next
''''check
For i = 1 To 12
k = state(i)
Select Case i
    Case 1                  ''''曹操
        bs(k) = 0
        bs(k + 1) = 0
        bs(k + 4) = 0
        bs(k + 5) = 0
    Case 2, 3, 4, 5, 6
        If i <= hnum + 1 Then ''''横放的将军
            bs(k) = 0
            bs(k + 1) = 0
        Else                ''''竖放的将军
            bs(k) = 0
            bs(k + 4) = 0
   End If
   Case 7, 8, 9, 10, 11, 12 ''''小卒和空格
        bs(k) = 0
End Select
Next i
isvalid = True
For i = 1 To 20
    If bs(i) > 0 Then
        isvalid = False
        Exit Function
  End If
Next i
End Function
Private Sub cmdStart_Click()
Dim BEGINSTATE(1 To 12) As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim iHnum As Long
Dim time1 As Date
Dim time2 As Date
Dim ifile As Integer
ifile = FreeFile()
time1 = Now()
For i = 1 To 12
    BEGINSTATE(i) = Int(Mid(TextBegin.Text, i * 2 - 1, 2))
Next i
iHnum = CLng(txtNum.Text)
 If Not isvalid(BEGINSTATE, iHnum) Then
    MsgBox "初始状态不合法,请检查!"
    Exit Sub
End If
Set G_Next = New CHRDNext
Set G_Save = New CHRDSave
G_Save.AddState BEGINSTATE, 0, 0 ''''记录到最终的记录中去
i = 1
Do While i <= G_Save.iCurrentNum ''''堆栈尚未完成
    ''''读入当前记录
    G_Save.GetState i
    ShowId i, G_State.Level
    ''''判断是否可以结束循环
 If G_State.state(1) = 14 Then
      G_Save.iCurrentNum = i
      Exit Do
  End If
   ''''计算所有下级步骤
    G_Next.GetNext G_State.state, iHnum
    j = 1
    Do While j <= G_Next.iEndNum
 

上一页  [1] [2] [3] [4]  下一页


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台