Bird
Raised Fist0
DSA Cprogramming~10 mins

N Queens Problem in DSA C - Execution Trace

Choose your learning style10 modes available
Concept Flow - N Queens Problem
Start with empty board
↓
Place queen in row 0, col 0
↓
Check if safe
↓
Place queen
↓
Move to next row
↓
Repeat placement
↓
If no safe col in row
→Backtrack to previous row
↓
If all rows placed
→Solution found
↓
End or find more solutions
The flow shows placing queens row by row, checking safety, backtracking if needed, until all queens are placed safely.
Execution Sample
DSA C
bool solveNQueens(int row) {
  if (row == N) return true;
  for (int col = 0; col < N; col++) {
    if (isSafe(row, col)) {
      placeQueen(row, col);
      if (solveNQueens(row + 1)) return true;
      removeQueen(row, col);
    }
  }
  return false;
}
This code tries to place queens row by row, backtracking when no safe position is found.
Execution Table
StepOperationRowColumn TriedActionBoard State (Q=queen, .=empty)
1Try place queen00Safe, place queenQ . . . . . . . . . . . . . . .
2Try place queen10Not safe, try nextQ . . . . . . . . . . . . . . .
3Try place queen11Not safe, try nextQ . . . . . . . . . . . . . . .
4Try place queen12Safe, place queenQ . . . . . Q . . . . . . . . .
5Try place queen20Not safe, try nextQ . . . . . Q . . . . . . . . .
6Try place queen21Not safe, try nextQ . . . . . Q . . . . . . . . .
7Try place queen23Safe, place queenQ . . . . . Q . . . . Q . . . .
8Try place queen30Not safe, try nextQ . . . . . Q . . . . Q . . . .
9Try place queen31Safe, place queenQ . . . . . Q . . . . Q . Q . .
10All queens placedN/AN/ASolution foundQ . . . . . Q . . . . Q . Q . .
11Backtrack31Remove queenQ . . . . . Q . . . . Q . . . .
12Try next col32Not safe, try nextQ . . . . . Q . . . . Q . . . .
13Try next col33Not safe, backtrackQ . . . . . Q . . . . Q . . . .
14Backtrack23Remove queenQ . . . . . Q . . . . . . . . .
15Try next col24No column 4, backtrackQ . . . . . Q . . . . . . . . .
16Backtrack12Remove queenQ . . . . . . . . . . . . . . .
17Try next col13Safe, place queenQ . . . . . . Q . . . . . . . .
18Try place queen20Not safe, try nextQ . . . . . . Q . . . . . . . .
19Try place queen21Safe, place queenQ . . . . . . Q . Q . . . . . .
20Try place queen30Not safe, try nextQ . . . . . . Q . Q . . . . . .
21Try place queen31Not safe, try nextQ . . . . . . Q . Q . . . . . .
22Try place queen32Not safe, try nextQ . . . . . . Q . Q . . . . . .
23Try place queen33Not safe, backtrackQ . . . . . . Q . Q . . . . . .
24Backtrack21Remove queenQ . . . . . . Q . . . . . . . .
25Try next col22Not safe, try nextQ . . . . . . Q . . . . . . . .
26Try next col23Not safe, backtrackQ . . . . . . Q . . . . . . . .
27Backtrack13Remove queenQ . . . . . . . . . . . . . . .
28Try next col14No column 4, backtrackQ . . . . . . . . . . . . . . .
29Backtrack00Remove queen. . . . . . . . . . . . . . . .
30Try next col01Safe, place queen. Q . . . . . . . . . . . . . .
31Continue similarlyN/AN/AContinue placing queensPartial board states...
32EventuallyN/AN/AFind all solutions or stopFinal board states
33EndN/AN/ANo more columns to tryFinal or no solution
💡 All rows processed with safe queen placements or all options exhausted with backtracking
Variable Tracker
VariableStartAfter Step 1After Step 4After Step 7After Step 10After Step 29After Step 30Final
row0123N (4)01N or backtracked
col0033101varies
board[empty]Q . . . . . . . . . . . . . . .Q . . . . . Q . . . . . . . . .Q . . . . . Q . . . . Q . . . .Q . . . . . Q . . . . Q . Q . .. . . . . . . . . . . . . . . .. Q . . . . . . . . . . . . . .varies with placement
Key Moments - 3 Insights
Why do we backtrack when no safe column is found in a row?
Because placing a queen in the current row is impossible without conflicts, so we remove the queen from the previous row and try a different column there (see steps 13-15 and 25-27 in execution_table).
How do we know if a position is safe for placing a queen?
We check columns, and diagonals for existing queens before placing (implied in 'Safe' or 'Not safe' in execution_table rows like 2, 4, 5).
Why does the algorithm stop when row == N?
Because all N queens have been placed safely on the board, meaning a solution is found (see step 10).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 10, what is the board state?
A. Q . .\n. . . Q\n. Q . .\n. . . .
BQ . . .\n. . . .\n. . . .\n. . . .
CQ . . .\n. . Q .\n. . . Q\n. Q . .
D. . . .\n. . . .\n. . . .\n. . . .
💡 Hint
Refer to the 'Board State' column at step 10 in execution_table.
At which step does the algorithm first backtrack by removing a queen?
AStep 11
BStep 10
CStep 5
DStep 1
💡 Hint
Look for 'Remove queen' action in execution_table.
If the board size N is increased, how would the variable 'row' change in variable_tracker?
AIt would decrease
BIt would go up to N instead of 4
CIt would stay the same
DIt would become negative
💡 Hint
The 'row' variable tracks current row; it goes from 0 to N (see variable_tracker).
Concept Snapshot
N Queens Problem:
- Place N queens on NxN board
- One queen per row, no two queens attack
- Use backtracking: place queen, check safety
- If stuck, remove last queen and try next column
- Stop when all queens placed safely
Full Transcript
The N Queens Problem places N queens on an NxN chessboard so that no two queens threaten each other. The algorithm tries to place a queen in each row, checking if the position is safe by ensuring no other queen is in the same column or diagonal. If a safe position is found, it places the queen and moves to the next row. If no safe position exists in a row, it backtracks by removing the queen from the previous row and tries the next column there. This continues until all queens are placed or all options are exhausted. The execution table shows step-by-step queen placements, safety checks, backtracking, and board states. The variable tracker monitors the current row, column tried, and board configuration after each step. Key moments clarify why backtracking is needed, how safety is checked, and when the algorithm stops. The visual quiz tests understanding of board states, backtracking steps, and variable changes. The snapshot summarizes the problem and backtracking approach in simple terms.

Practice

(1/5)
1. What is the main goal of the N Queens Problem?
easy
A. Place N queens on an NxN chessboard so that all queens attack each other
B. Find the shortest path for a queen to move across the board
C. Count the total number of queens on the board
D. Place N queens on an NxN chessboard so that no two queens attack each other

Solution

  1. Step 1: Understand the problem statement

    The N Queens Problem requires placing N queens on an NxN chessboard so that no two queens threaten each other.
  2. Step 2: Identify the correct goal

    This means no two queens share the same row, column, or diagonal.
  3. Final Answer:

    Place N queens on an NxN chessboard so that no two queens attack each other -> Option D
  4. Quick Check:

    Goal = Place queens safely [OK]
Hint: Remember: Queens must not attack each other [OK]
Common Mistakes:
  • Thinking queens can attack each other
  • Confusing the problem with counting queens
  • Ignoring diagonal attacks
2. Which of the following is the correct way to declare a 2D array for the chessboard in C for the N Queens Problem with size N?
easy
A. int board[];
B. int board[N][N];
C. int board[N];
D. int board(N,N);

Solution

  1. Step 1: Recall C syntax for 2D arrays

    In C, a 2D array is declared as type name[size1][size2]; where both sizes are specified.
  2. Step 2: Match the correct declaration

    int board[N][N]; uses int board[N][N]; which correctly declares a 2D array for the chessboard.
  3. Final Answer:

    int board[N][N]; -> Option B
  4. Quick Check:

    2D array syntax = int board[N][N]; [OK]
Hint: Use int board[N][N] for 2D arrays in C [OK]
Common Mistakes:
  • Using 1D array for 2D board
  • Incorrect syntax like int board(N,N);
  • Not specifying both dimensions
3. What will be the output of the following code snippet for N=4 when printing the board after placing queens at positions (0,1), (1,3), (2,0), (3,2)?
int board[4][4] = {0};
board[0][1] = 1;
board[1][3] = 1;
board[2][0] = 1;
board[3][2] = 1;
for(int i=0; i<4; i++) {
  for(int j=0; j<4; j++) {
    printf("%d ", board[i][j]);
  }
  printf("\n");
}
medium
A. 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1
B. 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
C. 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0
D. 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0

Solution

  1. Step 1: Place queens on the board as per given positions

    Set board[0][1], board[1][3], board[2][0], board[3][2] to 1; others remain 0.
  2. Step 2: Print the board row-wise

    Row 0: 0 1 0 0 Row 1: 0 0 0 1 Row 2: 1 0 0 0 Row 3: 0 0 1 0
  3. Final Answer:

    0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 -> Option C
  4. Quick Check:

    Positions match output [OK]
Hint: Map queen positions to 1s in 2D array [OK]
Common Mistakes:
  • Mixing row and column indices
  • Printing without spaces or newlines
  • Incorrect initialization of board
4. Identify the error in this C function snippet for checking if a queen can be placed at board[row][col]:
int isSafe(int board[][N], int row, int col) {
  for(int i=0; i=0 && j>=0; i--, j--) {
    if(board[i][j] == 1) return 0;
  }
  for(int i=row, j=col; i>=0 && j
medium
A. The function assumes N is a global constant but it may not be
B. The function incorrectly checks columns beyond the current row
C. The function misses checking the lower diagonals
D. The function does not check the current row for queens

Solution

  1. Step 1: Analyze the use of N in function parameter

    The function uses int board[][N] but N is not passed as a parameter or defined locally.
  2. Step 2: Understand C array parameter rules

    In C, array sizes must be known or passed explicitly; assuming N as global can cause errors if not defined.
  3. Final Answer:

    The function assumes N is a global constant but it may not be -> Option A
  4. Quick Check:

    Array size N must be known [OK]
Hint: Always pass array size explicitly or define globally [OK]
Common Mistakes:
  • Ignoring array size requirements in C
  • Assuming N is always global
  • Missing checks for diagonals
5. Given the backtracking approach to solve the N Queens Problem, which of the following best describes the role of recursion in the solution?
hard
A. Recursion tries to place queens row by row and backtracks when no safe position is found
B. Recursion counts the total number of queens placed on the board
C. Recursion moves queens randomly until all are placed
D. Recursion only checks if the board is full without placing queens

Solution

  1. Step 1: Understand backtracking in N Queens

    Backtracking uses recursion to place queens one row at a time, checking safety.
  2. Step 2: Identify recursion behavior

    If no safe position is found in a row, recursion backtracks to previous row to try other positions.
  3. Final Answer:

    Recursion tries to place queens row by row and backtracks when no safe position is found -> Option A
  4. Quick Check:

    Backtracking = recursive trial and error [OK]
Hint: Think recursion as trial and error with backtracking [OK]
Common Mistakes:
  • Thinking recursion places queens randomly
  • Confusing recursion with counting
  • Ignoring backtracking step
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard