TheAlgorithms/C++
1.0.0
All the algorithms implemented in C++
Toggle main menu visibility
Loading...
Searching...
No Matches
n_queens_all_solution_optimised.cpp
Go to the documentation of this file.
1
9
10
#include <array>
11
#include <iostream>
12
17
namespace
backtracking
{
23
namespace
n_queens_optimized
{
29
template
<
size_t
n>
30
void
PrintSol
(
const
std::array<std::array<int, n>, n> &board) {
31
for
(
int
i = 0; i < n; i++) {
32
for
(
int
j = 0; j < n; j++) {
33
std::cout << board[i][j] <<
" "
;
34
}
35
std::cout << std::endl;
36
}
37
std::cout << std::endl;
38
if
(n % 2 == 0 || (n % 2 == 1 && board[n / 2 + 1][0] != 1)) {
39
for
(
int
i = 0; i < n; i++) {
40
for
(
int
j = 0; j < n; j++) {
41
std::cout << board[j][i] <<
" "
;
42
}
43
std::cout << std::endl;
44
}
45
std::cout << std::endl;
46
}
47
}
48
58
template
<
size_t
n>
59
bool
CanIMove
(
const
std::array<std::array<int, n>, n> &board,
int
row,
60
int
col) {
62
for
(
int
i = 0; i <= col; i++) {
63
if
(board[row][i] == 1) {
64
return
false
;
65
}
66
}
68
for
(
int
i = row, j = col; i >= 0 && j >= 0; i--, j--) {
69
if
(board[i][j] == 1) {
70
return
false
;
71
}
72
}
74
for
(
int
i = row, j = col; i <= n - 1 && j >= 0; i++, j--) {
75
if
(board[i][j] == 1) {
76
return
false
;
77
}
78
}
79
return
true
;
80
}
81
88
template
<
size_t
n>
89
void
NQueenSol
(std::array<std::array<int, n>, n> board,
int
col) {
90
if
(col >= n) {
91
PrintSol<n>
(board);
92
return
;
93
}
94
for
(
int
i = 0; i < n; i++) {
95
if
(
CanIMove<n>
(board, i, col)) {
96
board[i][col] = 1;
97
NQueenSol<n>
(board, col + 1);
98
board[i][col] = 0;
99
}
100
}
101
}
102
}
// namespace n_queens_optimized
103
}
// namespace backtracking
104
109
int
main
() {
110
const
int
n = 4;
111
std::array<std::array<int, n>, n> board{};
112
113
if
(n % 2 == 0) {
114
for
(
int
i = 0; i <= n / 2 - 1; i++) {
115
if
(
backtracking::n_queens_optimized::CanIMove
(board, i, 0)) {
116
board[i][0] = 1;
117
backtracking::n_queens_optimized::NQueenSol
(board, 1);
118
board[i][0] = 0;
119
}
120
}
121
}
else
{
122
for
(
int
i = 0; i <= n / 2; i++) {
123
if
(
backtracking::n_queens_optimized::CanIMove
(board, i, 0)) {
124
board[i][0] = 1;
125
backtracking::n_queens_optimized::NQueenSol
(board, 1);
126
board[i][0] = 0;
127
}
128
}
129
}
130
return
0;
131
}
main
int main()
Main function.
Definition
generate_parentheses.cpp:110
backtracking::n_queens_optimized::PrintSol
void PrintSol(const std::array< std::array< int, n >, n > &board)
Definition
n_queens_all_solution_optimised.cpp:30
backtracking::n_queens_optimized::NQueenSol
void NQueenSol(std::array< std::array< int, n >, n > board, int col)
Definition
n_queens_all_solution_optimised.cpp:89
backtracking::n_queens_optimized::CanIMove
bool CanIMove(const std::array< std::array< int, n >, n > &board, int row, int col)
Definition
n_queens_all_solution_optimised.cpp:59
backtracking
for vector container
n_queens_optimized
Functions for Eight Queens puzzle optimized.
backtracking
n_queens_all_solution_optimised.cpp
Generated by
1.18.0