-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathN_Queens.java
More file actions
99 lines (84 loc) · 2.36 KB
/
N_Queens.java
File metadata and controls
99 lines (84 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
You are given N, and for a given N x N chessboard, find a way to place N queens such that no queen can attack any other queen on the chess board. A queen can be killed when it lies in the same row, or same column, or the same diagonal of any of the other queens. You have to print all such configurations.
Input Format :
Line 1 : Integer N
Output Format :
One Line for every board configuration.
Every line will have N*N board elements printed row wise and are separated by space
Note : Don't print anything if there isn't any valid configuration.
Constraints :
1<=N<=10
Sample Input 1:
4
Sample Output 1 :
0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0
0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0
*/
public class Solution {
public static void placeNQueens(int n){
/* Your class should be named Solution.
* Don't write main() function.
* Don't read input, it is passed as function argument.
* Print output as specified in the question
*/
int [][]board = new int [n][n];
queen(board,0);
}
public static boolean queen(int [][]board,int col)
{
if(col == board.length)
{
printSol(board);
return true;
}
boolean res =false;
for(int i=0;i<board.length;i++)
{
if(isSafe(board,i,col)==true)
{
board[i][col]=1;
res =queen(board,col+1)||res;
board[i][col]=0;
}
}
return res;
}
public static boolean isSafe(int [][]board, int row, int col)
{
int i,j;
for( i=0;i<board.length;i++)
{
if(board[i][col]==1)
return false;
}
for(i=0;i<board.length;i++)
{
if(board[row][i]==1)
return false;
}
for(i=row,j=col;i>=0&&j>=0;i--,j--)
{
if(board[i][j]==1)
return false;
}
for(i=row,j=col;i<board.length&&j>=0;i++,j--)
{
if(board[i][j]==1)
return false;
}
return true;
}
public static void printSol(int [][]board)
{
for(int i=0;i<board.length;i++)
{
for(int j=0;j<board.length;j++)
{
System.out.print(board[i][j]+" ");
}
}
System.out.println();
}
}
/**
* @author Pradumn Patel */