Состояние проблемы в любой момент времени - это положение каждой королевы в каждом столбце на доске. Как сказал @poly, две королевы не могут быть в одном столбце. @poly проделал большую работу, объяснив параметры проблемы.
Если вы выбираете путь возврата, тогда вам нужно выбрать место для первой королевы и продолжить, чтобы посмотреть, работает ли он. Далее вы выбираете местоположение 2-й королевы, затем 3-го и, наконец, 4-го. Если четвертое не работает, вы вернетесь к третьему, если третье не сработает, вернетесь ко второму и т. Д.
Я просто расскажу о кейсе 4 на доске 4х4. Я бы сказал, что корень дерева - это то, где вы сделали ноль выбора. Первый уровень ниже корня будет четыре дочерних ... один дочерний для каждого возможного местоположения первой королевы в первом столбце (1,2,3 и 4). На высоте два в дереве вы выбираете местоположение 2-й королевы во втором столбце и так далее вниз по дереву.
Вот частично заполненное дерево:
""
|
-----------------------------------------------
1 2 3 4
| | | |
---------------------
1,1 1,2 1,3 1,4
|
------------------------------------
1,1,1 1,1,2 1,1,3 1,1,4
|
-------------------------------------------------
1,1,4,1 1,1,4,2 1,1,4,3 1,1,4,4
Таким образом, все листья дерева являются кортежами формы (A, B, C, D), где A - это позиция первой ферзя, B - это позиция 2-го, C - это позиция 3-го и D - позиция четвертого.
Так что я бы сказал, что «ценность» каждого узла - это набор вариантов, которые вы сделали до сих пор. Я не думаю, что видел бы это как int
. Вы можете просто сохранить его как string
, если хотите, или что-то вроде ArrayList
, может немного упростить вашу рекурсию. Надеюсь, это поможет.