This repository contains a C++ implementation of the N-Queens problem with a visualizer. The program not only solves the problem but also visually demonstrates the process of placing queens on the board using the backtracking algorithm.
The N-Queens problem is a classic combinatorial problem where the task is to place N queens on an N x N chessboard such that no two queens threaten each other. This means:
- No two queens can be in the same row.
 - No two queens can be in the same column.
 - No two queens can be on the same diagonal.
 
This program demonstrates the process of solving the N-Queens problem visually using terminal output.
- Visualization: Displays the board state as the backtracking algorithm progresses.
 - Interactivity: Option to view subsequent solutions during the execution.
 - Customizable Input: Users can input any board size 
N. - Multi-Solution Support: Finds all possible solutions for the given 
N. 
The program employs a backtracking algorithm:
- Start placing queens row by row.
 - At each row, check all columns for safe positions.
 - If a position is safe:
- Place the queen.
 - Mark the columns and diagonals threatened by this queen.
 
 - Recursively solve for the next row.
 - If no valid position exists, backtrack and remove the last placed queen.
 
The board is printed on the terminal, showing:
⇯("\u21EF") for a queen.▣("\u25A3") for threatened squares during solving.▢("\u25A2") for empty squares.
The board updates dynamically, pausing at each step to show progress.
- Purpose: Prints the current state of the board to the terminal.
 - Input: None (uses class variables 
boardandstate). - Logic:
- Iterates through the 
boardmatrix. - Differentiates between solving and solved states to format the display.
 
 - Iterates through the 
 
- Purpose: Determines if a queen can be placed at 
(row, col). - Input: Row and column indices.
 - Logic: Checks if the cell is unthreatened.
 
- Purpose: Implements the recursive backtracking algorithm to place queens.
 - Input: Current row index.
 - Logic:
- Attempts to place a queen in every column of the current row.
 - Marks threatened positions on the board.
 - Recursively solves for the next row.
 - Backtracks if no valid positions remain.
 
 
- Purpose: Recursively counts all possible solutions.
 - Input: Current row index.
 - Logic: Similar to 
solve, but without visualization. Simply increments a counter for each valid solution. 
- Purpose: Initializes the board and orchestrates the solving process.
 - Input: Size of the board (
n). - Logic:
- Resets all class variables.
 - Calls 
countSolutionsto determine the total number of solutions. - Calls 
solveto find and display solutions interactively. 
 
- Purpose: Entry point of the program.
 - Input: Reads 
nfrom the user. - Logic: Instantiates the 
NQueensVisualizerclass and callssolveNQueens. 
# Clone the Repository
$ git clone https://github.com/Pranav2092/N-Queen-Visualizer-CPP.git
# Navigate into the directory
$ cd N-Queen-Visualizer-CPPEnsure you have a C++ compiler installed. Use the following commands to compile and run the program:
# Compile the program
$ g++ -o nqv nqueenvisualizer.cpp
# Run the program
$ ./nqv- Enter the desired board size (
N). - The program will display the board as it solves the problem.
 - If there are multiple solutions, you can choose to view the next solution by pressing 
1, or stop by pressing0. 
- C++: The entire program is implemented in C++ for its efficiency and flexibility.
 
- Standard Template Library (STL): Utilized for dynamic arrays (
vector) and input/output operations. unistd.h: Used to add delays for visualization (sleep).
- ANSI Escape Codes: Used to clear the terminal and update the display dynamically.
 - Unicode Characters: Enhance board visualization.
 
Pranav Sharma
Passionate about problem-solving and creating engaging visualizations in C++.
Feel free to contribute, report bugs, or suggest enhancements! 😊