diff options
| author | Syndamia <kamen@syndamia.com> | 2024-01-05 15:29:15 +0200 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2024-01-05 15:29:15 +0200 |
| commit | 1f1bba9cbb7c9924da7aa25de46596c11bd6f202 (patch) | |
| tree | 4624f83c40f0de28c965f2e2923d9ca479bec9b0 /week12/ex3.cpp | |
| parent | 7e7c710287f25b9c958c9026b18f88587174d47f (diff) | |
| download | upp-2023-solutions-1f1bba9cbb7c9924da7aa25de46596c11bd6f202.tar upp-2023-solutions-1f1bba9cbb7c9924da7aa25de46596c11bd6f202.tar.gz upp-2023-solutions-1f1bba9cbb7c9924da7aa25de46596c11bd6f202.zip | |
[w12] Added solutions
Diffstat (limited to 'week12/ex3.cpp')
| -rw-r--r-- | week12/ex3.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/week12/ex3.cpp b/week12/ex3.cpp new file mode 100644 index 0000000..e5c64ef --- /dev/null +++ b/week12/ex3.cpp @@ -0,0 +1,58 @@ +#include <iostream> + +void markQueen(int valueBy, int row, int col, int board[8][8]) { + for (int i = 0; i < 8; i++) { + board[row][i] += valueBy; + } + for (int i = 0; i < 8; i++) { + board[i][col] += valueBy; + } + for (int i = 0; i < 8; i++) { + if (row+i < 8 && col+i < 8) + board[row+i][col+i] += valueBy; + if (row-i > -1 && col-i > -1) + board[row-i][col-i] += valueBy; + } + for (int i = 0; i < 8; i++) { + if (row-i > -1 && col+i < 8) + board[row-i][col+i] += valueBy; + if (row+i < 8 && col-i > -1) + board[row+i][col-i] += valueBy; + } +} + +void placeQueen(int row, int col, int board[8][8]) { + markQueen(1, row, col, board); +} + +void removeQueen(int row, int col, int board[8][8]) { + markQueen(-1, row, col, board); +} + +int possibleSolutions(int row, int board[8][8]) { + // Board is filled with queens + if (row == 8) { + // За бонуса, тук просто принтираме целия board + return 1; + } + + // Find first free column, if any + int col = 0; + int sum = 0; + while (col < 8) { + // Place queen temporarily + if (board[row][col] == 0) { + placeQueen(row, col, board); + sum += possibleSolutions(row + 1, board); + removeQueen(row, col, board); + } + col++; + } + + return sum; +} + +int main() { + int board[8][8] = { { 0 } }; + std::cout << possibleSolutions(0, board) << std::endl; +} |
