Почему я не могу вывести что-то, чему научился у geeksforgeeks, но сначала я хочу напечатать 2 4 1 3.
Я использую nq, чтобы пометить позиции ферзей, безопасно, чтобы проверить, будет ли королева другие могут печатать для печати правильных комбинаций в следующем порядке.
Ввод
4
Ожидаемый вывод
2 4 1 3
3 1 4 2
#include<iostream>
using namespace std;
int print(int b[12][12], int n) {
for (int j = 0; j < n; j++)
for (int i = 0; i < n; i++)
if (b[i][j] == 1)
cout << i + 1 << " ";
cout << endl;
}
bool issafe(int b[12][12], int row, int col, int n) {
for (int j = col; j > 0; j--)
if (b[row][j - 1] == 1)
return false;
for (int i = row, j = col; i > 0 && j > 0; i--, j--)
if (b[i - 1][j - 1] == 1)
return false;
for (int i = row, j = col; i < n - 1 && j > 0; i++, j--)
if (b[i + 1][j - 1] == 1)
return false;
}
bool nq(int b[12][12], int col, int n) {
if (col == n) {
print(b, n);
return true;
}
for (int i = 0; i < n; i++) {
if (issafe(b, i, col, n)) {
b[i][col] = 1;
nq(b, col + 1, n);
b[i][col] = 0;
}
}
}
int main() {
int n;
cin >> n;
int b[12][12];
nq(b, 0, n);
return 0;
}