Ну, вы можете проверить уникальное решение, только если у вас есть решение. Место для проверки находится в точке, где вы увеличиваете переменную count
. На этом этапе сравните текущую плату с набором уникальных плат и, если ее нет в наборе, добавьте в нее новое решение.
Что касается вашей скорости, у вашего решения есть узкое место при нажатии и нажатии значения state
. Чем больше доска, тем медленнее становится.
Гораздо более быстрый способ состоит в том, чтобы иметь только одну доску, и каждый квадрат должен вести счет количества королев, контролирующих этот квадрат. Итак, у вас будет это:
function scan (column)
if column == number of columns (zero based index)
check solution
else
if there's a free space
add queen
increment controlled squares in columns to right of current column
scan (column+1)
decrement controlled squares in columns to right of current column
remove queen
У этого гораздо меньше данных, которые будут выталкиваться / извлекаться, и это значительно увеличит скорость.