-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathn-queens.cpp
59 lines (53 loc) · 1.16 KB
/
n-queens.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <bits/stdc++.h>
using namespace std;
void printSolution(vector<vector<int>>& board) {
auto N = board.size();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
printf(" %d ", board[i][j]);
printf("\n");
}
printf("\n");
}
bool isSafe(vector<vector<int>>& board, int row, int col) {
auto N = board.size();
int i, j;
for (i = 0; i < col; i++)
if (board[row][i])
return false;
for (i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--)
if (board[i][j])
return false;
for (i = row + 1, j = col - 1; j >= 0 && i < N; i++, j--)
if (board[i][j])
return false;
return true;
}
void solveNQUtil(vector<vector<int>>& board, int col, int& c) {
auto N = board.size();
if (col == N) {
printSolution(board);
c++;
return;
}
for (int i = 0; i < N; i++) {
if (isSafe(board, i, col)) {
board[i][col] = 1;
solveNQUtil(board, col + 1, c);
board[i][col] = 0;
}
}
}
int solve(int N) {
vector<vector<int>> board(N);
for (size_t i = 0; i < N; i++) {
board[i].resize(N, 0);
}
int c = 0;
solveNQUtil(board, 0, c);
return c;
}
int main() {
cout << solve(7);
return 0;
}