Skip to content

Dsa Backtrack N Queens

DodaTech 1 min read

In this tutorial, you'll learn about How to Fix N. We cover key concepts, practical examples, and best practices.

Fix n-queens errors when conflict check doesn't cover diagonals or board reset after failure.

Quick Fix

Wrong

def nq(n):
    res=[]; b=['.'*n for _ in range(n)]
    def dfs(r):
        if r==n: res.append(b[:]); return
        for c in range(n):
            if safe(r,c):
                b[r]=b[r][:c]+'Q'+b[r][c+1:]
                dfs(r+1)
                b[r]=b[r][:c]+'.'+b[r][c+1:]
    def safe(r,c):
        for i in range(r):
            if b[i][c]=='Q': return False
            if c-(r-i)>=0 and b[i][c-(r-i)]=='Q': return False
            if c+(r-i)<n and b[i][c+(r-i)]=='Q': return False
        return True
    dfs(0)
    return res

Correct. Common bug: not checking all diagonals or board immutability.

def solveNQueens(n):
    cols=set(); diag1=set(); diag2=set()
    res=[]; board=[['.']*n for _ in range(n)]
    def dfs(r):
        if r==n: res.append([''.join(row) for row in board]); return
        for c in range(n):
            d1=r-c; d2=r+c
            if c in cols or d1 in diag1 or d2 in diag2: continue
            cols.add(c); diag1.add(d1); diag2.add(d2); board[r][c]='Q'
            dfs(r+1)
            cols.remove(c); diag1.remove(d1); diag2.remove(d2); board[r][c]='.'
    dfs(0)
    return res
n=4 -> [['.Q..','...Q','Q...','..Q.'],['..Q.','Q...','...Q','.Q..']]. O(n!).

Prevention

Use sets for column and diagonal conflict tracking. d1 = r-c (constant on main diag), d2 = r+c (anti-diag).

DodaTech Tools

Doda Browser's algorithm visualizer steps through DSA operations line by line. DodaZIP archives implementation patterns for team sharing. Durga Antivirus Pro detects memory corruption patterns in algorithm implementations.

FAQ

What is N-Queens?

Place N queens on NxN board so none attack each other. Diagonal tracking via sets.

Diagonal formula?

r-c same on main diagonal. r+c same on anti-diagonal.

Set vs loop?

O(1) conflict check with sets vs O(n) loop. Much faster.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro