Я работаю над проблемой n-queens и частично проверяю, угрожает ли другой ферзь королеве, чтобы определить хорошее состояние доски.
У меня есть двумерный массив, заполненный нулями, в этомНапример, 4x4:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Я случайным образом заполняю каждую строку одной королевой, в данном случае это 1:
0 0 1 0
1 0 0 0
1 0 0 0
0 0 0 1
Мне нужно проверить, сколько других фигур угрожают данномукусок.Королеве грозит опасность, если она делит горизонталь, диагональ или вертикаль с другой королевой.
Однако я не совсем уверен, как пройти массив по диагонали.
int checkThreats(vector<vector<int> > board, int r, int c) {
int threats = 0;
// checks vertical and horizontal
for (int i = 0; i < board.size(); i++) {
if (board[i][c] == 1 || board[r][i] == 1) {
threats++;
}
}
// it will count itself as a threat, so less one
threats--;
return threats;
}
Этоалгоритм проверки по горизонтали и вертикали.Учитывая позицию на доске r, c
, она проверяет, сколько королев существует в позициях слева, справа, вверх и вниз (в форме креста +).
Взять координату r, c
из 1, 0
, проверенные позиции помечаются x
, o
, если существует угроза:
x 0 1 0
o x x x
o 0 0 0
x 0 0 1
В этом случае threats == 1
, поскольку мы не считаем исходныйposition.
Моя проблема - попытаться найти фигуры в форме x вдоль диагоналей.