Загадка восьми ферзей - это задача размещения восьми шахматных ферзей на шахматной доске 8 × 8 так, чтобы никакие две королевы не угрожали друг другу.

Мы можем начать решение, поместив 8 ферзей в 8 столбцов. Но если вы поставите ферзей случайным образом, очень высока вероятность, что они будут атаковать друг друга, и, следовательно, это не решение. Поэтому нам нужно просто найти ряд для каждого ферзя, чтобы они не атаковали друг друга.

Мы начнем с первого столбца и перейдем к восьмому столбцу один за другим. Для каждого столбца мы пробуем все 8 строк, чтобы найти ту строку, в которой установка текущего ферзя не повлияет на ранее поставленных ферзей. Если мы не можем найти такую ​​строку, мы вернемся к предыдущему столбцу и начнем процесс заново.

isSafe() принимает в качестве параметров двумерный массив, строку и столбец и решает, безопасна ли данная ячейка, обозначенная строкой и столбцом, для размещения ферзя. dfs() принимает двумерный массив и текущий столбец, для которого мы пытаемся поставить ферзя. Он будет рекурсивно переходить к следующему столбцу, если мы найдем строку для размещения ферзя в текущем столбце, и он вернется к предыдущему, если нет действительной строки, доступной для размещения ферзя.

Я не вложил много усилий в код. Так что, если вы обнаружите какую-либо ошибку или оптимизацию, не стесняйтесь ее комментировать.