Skip to content

Commit ca2a53e

Browse files
committed
N-Queen code updated:
1 parent c66639e commit ca2a53e

File tree

1 file changed

+27
-44
lines changed

1 file changed

+27
-44
lines changed
Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
11
#include<stdio.h>
2-
#define EMPTY '-'
3-
#define QUEEN 'Q'
2+
#include<string.h>
43

5-
char queen[100][100];
6-
int n;
4+
#define EMPTY 0
5+
#define QUEEN 1
6+
7+
int queen[100][100];
8+
int n, total_solutions;
79

810
void initializeBoard(int n)
911
{
10-
int i,j;
11-
12-
for(i=1;i<=n;i++)
13-
{
14-
for(j=1;j<=n;j++)
15-
{
16-
queen[i][j] = EMPTY;
17-
}
18-
}
12+
memset(queen, EMPTY, sizeof(queen));
1913
}
2014

2115
void printBoard()
@@ -26,24 +20,18 @@ void printBoard()
2620
{
2721
for(j=1;j<=n;j++)
2822
{
29-
printf("%c ", queen[i][j]);
23+
printf("%c ", queen[i][j] ? 'Q' : '-');
3024
}
3125
printf("\n");
3226
}
27+
printf("\n");
3328
}
3429

3530
int haveConflict(int row, int col)
3631
{
3732
int i,j;
3833

39-
//check queen column
40-
for(i=1;i<=n;i++)
41-
{
42-
if(queen[row][i] == QUEEN)
43-
return 1;
44-
}
45-
46-
//check queen row
34+
//check the column positions above this position
4735
for(i=1;i<row;i++)
4836
{
4937
if(queen[i][col] == QUEEN)
@@ -68,46 +56,41 @@ int haveConflict(int row, int col)
6856
}
6957

7058
//target is to place one queen in each row so that no one collides with each other
71-
//Here placed_queen parameter shows how much queen we've already placed, also how much row we've already covvered
72-
void backtrack(int placed_queen)
59+
//Here queen_row parameter shows the current we're going to place a Queen
60+
void backtrack(int queen_row)
7361
{
74-
int i, success = 0,next_move;
75-
if(placed_queen > n) return; // All queens are placed properly
62+
int i;
7663

77-
for(i=1;i<=n;i++)
64+
if(queen_row > n)
7865
{
79-
if(queen[placed_queen][i] == QUEEN) //If we found already placed queen, remove it
80-
{
81-
//remove queen
82-
queen[placed_queen][i] = EMPTY;
83-
continue;
84-
}
66+
total_solutions++;
67+
printBoard();
68+
return;
69+
}
8570

86-
if(!haveConflict(placed_queen, i))
71+
for(i=1;i<=n;i++)
72+
{
73+
if(!haveConflict(queen_row, i))
8774
{
88-
//place a queen piece
89-
success = 1;
75+
queen[queen_row][i] = QUEEN;
9076

91-
queen[placed_queen][i] = QUEEN;
77+
backtrack(queen_row + 1);
9278

93-
break;
79+
queen[queen_row][i] = EMPTY;
9480
}
9581
}
96-
97-
next_move = success ? (placed_queen + 1) : (placed_queen -1);
98-
99-
backtrack(next_move);
10082
}
10183

10284
int main()
10385
{
86+
printf("Enter Board size: ");
10487
scanf("%d", &n);
10588

10689
initializeBoard(n);
10790

108-
backtrack(0);
91+
backtrack(1);
10992

110-
printBoard();
93+
printf("Total Solutions: %d\n", total_solutions);
11194

11295
return 0;
11396
}

0 commit comments

Comments
 (0)