在VBA中使用树形数据结构

我越来越熟悉VBA,我正在尝试为Tic Tac Toe做一个机器学习程序。 我不想只是硬编码赢的可能性。

我所提出的机器学习程序最好的办法就是拥有一个可以做出所有可能动作的树形结构,然后让计算机在树枝失去时切断树枝。

例如用下面的方式来表示人们玩过的地方,以及这些字母的顺序是游戏进行的顺序

a|b|c ----- d|e|f ----- g|h|i 

abdgfce – 意思是电脑赢了,一个是先玩,b秒,三分之一….

我想有一个数据树,看起来像:

等级0:a(电脑始终以a开头)

等级1:除了a以外的所有字母,因为它已经被玩过了

等级2:对于等级0中的每个字母,除了其之前的一个字母和a之外的所有字母

等树的所有层次,直到他们不可能的行动。

我试图寻找在VBA中实现这种结构的方法,但是微软的网站没有任何帮助,论坛只说二进制或sorting树。 有人指出我正确的方向,或给我一些指针,我应该尝试什么? 如果这个解决scheme不可行,那么解决这个问题有什么更好的办法?

谢谢,

卡里姆

只有362,880的方式来填补一个井字棋桌上的九个地方。 完整的集合可以在列A中生成:

ABCDEFGHI

B1单元格中运行GetString():

 Dim ll As Long Dim CurrentRow As Long Sub GetString() Dim InString As String InString = Sheets("Sheet1").Range("B1") ActiveSheet.Columns(1).Clear CurrentRow = 1 Application.ScreenUpdating = False Call GetPermutation("", InString) Application.ScreenUpdating = True End Sub Sub GetPermutation(x As String, y As String) ' The source of this algorithm is unknown Dim i As Long, j As Long j = Len(y) If j < 2 Then Cells(CurrentRow, 1) = x & y CurrentRow = CurrentRow + 1 Else For i = 1 To j Call GetPermutation(x + Mid(y, i, 1), _ Left(y, i - 1) + Right(y, j - i)) Next End If End Sub 

XX

当然,大部分的比赛都将在所有9个名额都填满之前结束。 如果电脑丢失,该项目被删除,等等

编辑#1:

韦恩·邓恩Wayne G. Dunn)认为,变化的数量可能会减less。 计算机(玩家#1)有九个可能的地方放置它的X.玩家#2然后有八个可能的地方放置她的O等。

这产生9 * 8 * 7 * 6 * 5 * 4 * 3 * 2或9阶乘。

然而,游戏可以在所有九个地方都满了之前结束。 因此很多362880的变化都可以被丢弃…………我只是不知道有多less。