Remember the queen positions are set at (0,1) and (1,3).
✗ Incorrect
The board is a 4x4 grid with '.' for empty and 'Q' for queen. Only positions (0,1) and (1,3) have queens.
🧠 Conceptual
intermediate
1:00remaining
Number of solutions for 4 Queens
How many distinct solutions exist for the classic 4 Queens problem on a 4x4 chessboard?
A1
B4
C2
D8
Attempts:
2 left
💡 Hint
Try to visualize or recall the known count of solutions for 4 queens.
✗ Incorrect
The 4 Queens problem has exactly 2 distinct solutions where no two queens attack each other.
🔧 Debug
advanced
1:30remaining
Identify the error in this N Queens backtracking code snippet
What error will this code cause when trying to place queens on a 4x4 board?
int board[4][4] = {0};
for(int i=0; i<=4; i++) {
for(int j=0; j<=4; j++) {
board[i][j] = 0;
}
}
ARuntime error: Array index out of bounds
BNo error, code runs fine
CCompilation error: missing semicolon
DLogical error: board not initialized
Attempts:
2 left
💡 Hint
Check the loop conditions and array size carefully.
✗ Incorrect
The loops use <=4 which tries to access index 4, but valid indices are 0 to 3, causing out of bounds error.
🚀 Application
advanced
1:30remaining
Count solutions for 5 Queens using backtracking
What is the total number of distinct solutions for the 5 Queens problem on a 5x5 board?
A10
B5
C8
D12
Attempts:
2 left
💡 Hint
The number of solutions grows but is known for small boards.
✗ Incorrect
The 5 Queens problem has 10 solutions.
❓ Predict Output
expert
2:00remaining
Output of recursive call count in N Queens solver
Given this recursive function snippet counting calls for N=4, what is the final value of 'count' after solving all placements?
int count = 0;
void solve(int row, int n) {
if(row == n) {
count++;
return;
}
for(int col=0; col
A4
B2
C1
D8
Attempts:
2 left
💡 Hint
The count increments only when a full valid placement is found.
✗ Incorrect
For N=4, the total valid solutions found by backtracking is 2, so count will be 2.
Practice
(1/5)
1. What is the main goal of the N Queens Problem in chess?
easy
A. Place N queens on an NxN board in the same column
B. Place N queens on an NxN board so that all queens attack each other
C. Place N queens on an NxN board in the same row
D. Place N queens on an NxN board so that no two queens attack each other
Solution
Step 1: Understand the problem statement
The N Queens Problem requires placing queens so that none can attack another, meaning no two queens share the same row, column, or diagonal.
Step 2: Analyze the options
Place N queens on an NxN board so that no two queens attack each other correctly states the goal. Options B, C, and D contradict the problem's requirement by allowing attacks or placing queens in the same row or column.
Final Answer:
Place N queens on an NxN board so that no two queens attack each other -> Option D
Quick Check:
Goal = No two queens attack each other [OK]
Hint: Remember: Queens must not threaten each other on board [OK]
Common Mistakes:
Thinking queens can share rows or columns
Confusing attacking with protecting
Ignoring diagonal attacks
2. Which of the following C++ function signatures is correct for a recursive function solving the N Queens Problem?
easy
A. void solveNQueens(vector<int> row, int positions)
B. bool solveNQueens(int row, vector<int>& positions)
C. int solveNQueens(int row, int positions[])
D. bool solveNQueens(int positions, vector<int> row)
Solution
Step 1: Identify correct parameter types for recursion
The function should take the current row (int) and a reference to a vector holding queen positions to track placements.
Step 2: Check each option's signature
bool solveNQueens(int row, vector<int>& positions) uses int and vector<int>& correctly. void solveNQueens(vector<int> row, int positions) swaps types incorrectly. int solveNQueens(int row, int positions[]) uses array but lacks reference semantics. bool solveNQueens(int positions, vector<int> row) swaps parameter order and types incorrectly.
Final Answer:
bool solveNQueens(int row, vector<int>& positions) -> Option B
Quick Check:
Correct signature uses int and vector reference [OK]
Hint: Recursive function needs current row and positions by reference [OK]
Common Mistakes:
Passing vector by value causing performance issues
Swapping parameter order
Using wrong data types for parameters
3. What will be the output of the following code snippet for N=4?
void printBoard(const vector<int>& positions) {
for (int row = 0; row < positions.size(); ++row) {
for (int col = 0; col < positions.size(); ++col) {
if (positions[row] == col) std::cout << "Q ";
else std::cout << ". ";
}
std::cout << std::endl;
}
}
int main() {
vector<int> positions = {1, 3, 0, 2};
printBoard(positions);
return 0;
}
medium
A. . . Q .
Q . . .
. . . Q
. Q . .
B. Q . . .
. Q . .
. . Q .
. . . Q
C. . Q . .
. . . Q
Q . . .
. . Q .
D. . . . Q
Q . . .
. Q . .
. . Q .
Solution
Step 1: Understand positions vector meaning
Each index is a row; value at index is the column where queen is placed. For positions = {1,3,0,2}, queens are at (0,1), (1,3), (2,0), (3,2).
Step 2: Visualize the board
Row 0: Q at col 1 -> . Q . .
Row 1: Q at col 3 -> . . . Q
Row 2: Q at col 0 -> Q . . .
Row 3: Q at col 2 -> . . Q .
Final Answer:
. Q . .
. . . Q
Q . . .
. . Q .
-> Option C
Quick Check:
Positions map to board rows and columns correctly [OK]
Hint: Positions vector index = row, value = queen column [OK]
Common Mistakes:
Mixing row and column indices
Printing Q in wrong columns
Ignoring zero-based indexing
4. Identify the bug in this code snippet for checking if a queen can be placed safely:
bool isSafe(int row, int col, const vector<int>& positions) {
for (int i = 0; i < row; ++i) {
if (positions[i] == col || abs(positions[i] - col) == abs(i - row))
return false;
}
return true;
}
medium
A. No bug; the function correctly checks safety
B. The diagonal check condition is incorrect
C. The loop should run until i <= row instead of i < row
D. The function does not check for column conflicts
Solution
Step 1: Analyze loop and conditions
The loop checks all rows before current row. It returns false if any queen shares the same column or diagonal.