Домино - QBasic
Формулировка задачи:
Вот реально наскучили однотипные задачи от
echs
, замешанные на рекурсии особенно. Есть же и другие приёмы программирования. Вот известен ли вам метод бэктрекинг? Задача такая: Из стандартного набора домино ( кто не знает, 28 штук = 0-0, 0-1, 0-2 ... 6-6) в случайном порядке берём N штук. Задача компьютера выстроить максимально возможную цепочку, состыковывая их по правилам домино частями с равным количеством точек.Пример
N= 6 1-2:1-3:2-6:3-6:5-6:4-4Решение
Цепочка из 5 элементов 5-6:6-2:2-1:1-3:3-6 Кто сможет решить любым способом, не обязательно при помощи бэктрекинга, главное правильно и эффективно?Решение задачи: «Домино»
textual
Листинг программы
Dim s, b() As Boolean, n As Long, m As String, k As Long, l As Long Sub main() m = "" k = 0 l = 0 s = Array("1-2", "1-3", "2-6", "3-6", "5-6", "4-4") n = UBound(s) ReDim b(n) As Boolean domino "", "" Debug.Print Mid$(m, 2) 'Debug.Print "Всего вариантов: " & l, "из них с максимальной последовательностью: " & k End Sub Sub domino(txt As String, ms As String) Dim i As Long, flag As Boolean For i = 0 To n If (b(i) = False And (Right(txt, 1) = Left(s(i), 1) Or Right(txt, 1) = Right(s(i), 1))) Or txt = "" Then flag = True b(i) = True If Right(txt, 1) = Right(s(i), 1) Then domino StrReverse(s(i)), ms & ":" & StrReverse(s(i)) Else domino CStr(s(i)), ms & ":" & s(i) b(i) = False End If Next i If Not flag Then If Len(m) < Len(ms) Then m = ms: k = 0 If Len(ms) = Len(m) Then k = k + 1 l = l + 1 End If End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д