Использование структуры данных деревьев в VBA
Вопрос
Я получаю более знакомую с VBA, и я пытаюсь сделать программу обучения машины для Tic Tac Toe. Я не хочу просто сложный код возможности выиграть.
Лучшее, что я придумал для программы обучения машины - это иметь структуру дерева со всеми возможными движениями, которые могут быть выполнены, а затем иметь разрезные ветви дерева, когда он теряет с этой веткой. .
Например, со следующим способом обозначать, где играли люди, и заказ буквы написаны как заказ, прогрессировал игру
a|b|c
-----
d|e|f
-----
g|h|i
.
abdgfce - означает, что компьютер выигрывает, A был сыгран первым, B вторым, d третий ....
Я хотел бы иметь дерево данных, которое выглядит как:
Уровень 0: A (компьютер всегда начинается с A)
Уровень 1: Все буквы, кроме как это уже было воспроизведено
Уровень 2: для каждой буквы на уровне 0, все буквы, кроме одного прямо перед ним и A
и так далее для всех уровней дерева до тех пор, пока их не более возможных движений.
Я пытался искать способы реализации этой структуры в VBA, но веб-сайт Microsoft не помогал, и форумы говорят только о двоичных или сортировке деревьев. Кто-нибудь укажет меня в правильном направлении или дать мне некоторые указатели относительно того, что я должен попробовать? Какой лучший способ решить эту проблему, если это решение не осуществимо?
Спасибо,
karim
Решение
Есть «только« 362,880 способ заполнить девять мест в таблице Tic-Tac-Tace.Полный набор может быть сгенерирован в столбце
abcdefghi
в ячейке
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
.
Конечно, большинство игр закончится до того, как все девять мест заполнены.Если компьютер проигрывает, этот элемент удален и т. Д.
Редактировать # 1:
Wayne G. Dunn предложил, чтобы количество вариаций может быть уменьшено.Компьютер (проигрыватель № 1) имеет девять возможных мест, которые он размещает
Это дает 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 или 9 факторов.
Однако игра может закончиться, прежде чем все девять мест заполнены.Таким образом, многие из вариаций 362880 могут быть отброшены ............ Я просто не знаю, сколько.