# N Queens Problem in C Using Backtracking

Here you will get program for N queens problem in C using backtracking.

N Queens Problem is a famous puzzle in which n-queens are to be placed on a nxn chess board such that no two queens are in the same row, column or diagonal. In this tutorial I am sharing the C program to find solution for N Queens problem using backtracking. Below animation shows the solution for 8 queens problem using backtracking.

Also Read: C Program for Tower of Hanoi Problem 8 Queens Problem Using Backtracking

## Program for N Queens Problem in C Using Backtracking

Output Comment below if you found anything incorrect in above N queens problem in C.

### 29 thoughts on “N Queens Problem in C Using Backtracking”

1. arafat chowdhury

#include will not declared in the scope fix it then it will work 🙂 thanks again to build up this dashing structure .

2. Hey Neeraj! can you please explain the code. I have got manual logic of n queen problem but finding code difficult to understand like board[i]=column and other such lines. Does board[i] or board[row] has some value. Please explain, i am a beginner….

3. I tried but i am not able to understand the logic :-
if (abs(board[i]-column)==abs(i-row))

How, it is able to check the column. please explain.

1. Actually it is used to check that queen should not be placed diagonally.

4. thanks for the code, but I have a doubt.
consider the first two queens are placed at (row 1, column1) and (row2 ,column 3). now the next queen can not be placed in row 3 and hence the position of 2nd queen is changing from (row2, column3) to (row2 ,column4).
since, I can not see any code line to decrement the row number. can you please tell me how it is really executing this step???

1. Hardik D. Bhumkar

same question…….how is the row decrementing?

2. That’s the basics of backtracking :
We use a recursive call of the queen() function to compute and verify the next row.
If a position cannot be found for the next row, the code goes back to where the recursive call was made, and keeps going from there.

It’s not very clear, i’m sorry, let’s try it that way :
We’re on row 3. We’re looking for a position for our queen on that row, with those lines :
—————————–
if(place(row,column))
{
board[row]=column;
—————————–

If there’s a valid position, we place the queen, then call the function recursively :
—————————–
queen(row+1,n);
—————————–
Which is going to do the same thing again, for the next row : row 4.
If a position isn’t found in this call (for row + 1, which is row 4), the program will abandon that solution, and go back to where it was before, which means it will execute the rest of the code, and that was the loop where we’re incrementing “column” for row 3.. There, it will check again for the next value of column, and if the position is valid, it is then going to try again for row + 1 (row 4), until there is a valid solution there. When it finds one, it is going to call queen() again, with row + 1, which means row 5.

3. its an recursion algorithm.. when you return it takes you back to the earlier function from where you have called the function. means example : if u r in 4th row means you called place() function in 3th row.. so in case the functions returns the it will take back to 3rd row this how decrement takes place.

5. thank you so much bro 🙂 its hard to understand algorithm from textbook….. but u made it simple to understand through this program… thank you once again 🙂

6. Lazuardy Azhari

This is DFS algortihm or BFS algorithm?

1. DFS. We’re looking at the next layer to see if it’s valid.

2. Dfs bound function

7. explain in detail how place function is working. and what is abs?

1. abs means absolute

8. KESANA KARTHIK .

output not coming:-
the error i am getting:-
queen1.c:51:7: warning: implicit declaration of function ‘abs’ [-Wimplicit-function-declaration]
if(abs(board[i]-column)==abs(i-row))queen1.c:51:7: warning: implicit declaration of function ‘abs’ [-Wimplicit-function-declaration]
if(abs(board[i]-column)==abs(i-row))

1. abs is a function from the math library, you need to #include it for the function to work.

2. Use #include

3. 9. //Basically we will place queen at a row assuming for our solution all the queens are placed at 1 to row-1 correctly .To clear this condition queens at
//1 to row-1 are
//placed such that they do not contradict with queen placed at column vertically or diagonally .Since we are placing board[row]=column so there is no
//way in hell we can produce a solution such that board[i]=column when i iterates from 1 to row-1.Also for diagonal condition difference b/w i and row &&
//board[i] and column can’t be equal.Otherwise queen at ith row will kill u.

10. Rakibullahsarkar

How this program is terminating and printing two solutions

11. Malini Veeramani

can you please explain the code by tracing?
And with explanation of every line in the code

12. how is it printing all solutions ??
how does it store all the solutions?
its seems it is working on only one solution

13. Hi. Nice Solution.

14. nice solution

15. thankuuuuuuuuuuuuuuuu so much ur code was awsm and help me alot in my project

16. abs is a function in c…. i..e.,included in “stdlib”headerfile

17. 18. 19. 