باستخدام بنية البيانات شجرة في VBA
سؤال
أنا على الحصول على أكثر دراية VBA و أنا أحاول القيام آلة التعلم برنامج تيك تاك تو.أنا لا أريد أن مجرد رمز القرص الثابت الاحتمالات للفوز.
أفضل أنا قد يأتي مع الجهاز برنامج التعلم هو أن يكون هناك هيكل الشجرة مع جميع التحركات المحتملة التي يمكن أن تكون مصنوعة ، ومن ثم يكون الكمبيوتر قطع فروع الشجرة كلما فإنه يفقد مع ذلك الفرع.
على سبيل المثال مع الطريقة التالية للدلالة حيث كان الناس قد لعبت ترتيب الحروف كما هي مكتوبة ترتيب اللعبة تقدم
a|b|c
-----
d|e|f
-----
g|h|i
abdgfce - يعني الكمبيوتر انتصارات ، وقد لعبت لأول مرة ، ب الثانية ، د الثالثة....
أود الحصول على بيانات الشجرة التي تبدو مثل:
مستوى 0:a (الكمبيوتر يبدأ دائما مع)
المستوى 1:كل الحروف ما عدا ، كما سبق أن لعبت
المستوى 2:لكل حرف في المستوى 0 ، كل الحروف ما عدا واحدة قبل ذلك ،
و ذلك على كل المستويات من الشجرة حتى لا مزيد من التحركات المحتملة.
حاولت تبحث عن سبل لتنفيذ هذا الهيكل في VBA ولكن موقع مايكروسوفت من أي مساعدة و المنتديات فقط الكلام الثنائية أو الفرز الأشجار.شخص ما لي نقطة في الاتجاه الصحيح أو أن تعطيني بعض المؤشرات على ما يجب أن نحاول ؟ ما هي أفضل طريقة لحل هذه المشكلة إذا كان هذا الحل ليس ممكنا ؟
شكرا لك
كريم
المحلول
هناك "فقط" 362,880 طريقة لملء تسعة أماكن في تيك تاك تو الجدول.مجموعة كاملة يمكن أن تتولد في العمود A من خلال وضع:
تعني وجود اختالفات
في الخلية 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
وبطبيعة الحال ، فإن غالبية الألعاب ينتهي قبل كل تسعة أماكن تمتلئ.إذا كان الكمبيوتر يفقد هذا البند هو إزالتها ، إلخ.
تحرير#1:
واين G.دان واقترح عدد من الاختلافات قد تكون مخفضة.الكمبيوتر (لاعب#1) تسع ممكن يضعها مكان لها X. لاعب#2 ثم ثمانية الأماكن الممكنة لها مكان O. الخ.
هذا ينتج 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 أو 9 مضروب.
ومع ذلك ، فإن لعبة يمكن أن ينتهي قبل كل تسعة أماكن تمتلئ.وهكذا العديد من 362880 الاختلاف يمكن التخلص منها............أنا فقط لا أعرف كيف العديد من.