In: Computer Science
Write a JAVA pogram for the following scenario. Given an n × n × n cube containing n3 cells, we are to place n queens in the cube so that no two queens challenge each other (so that no two queens are in the same row, column, or diagonal). In JAVA, implement it on your system to solve problem instances in which n = 4 and n = 8.
package optional1;
import java.util.Scanner;
public class Main {
// print the final solution matrix
static void printSolution(int board[][],int N)
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
System.out.print(" " + board[i][j]
+ " ");
System.out.println();
}
}
// function to check whether the position is safe or not
static boolean isSafe(int board[][], int row, int col,int N)
{
int i, j;
for (i = 0; i < col; 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; j >= 0 && i < N; i++,
j--)
if (board[i][j] == 1)
return false;
return true;
}
// The function that solves the problem using backtracking
public static boolean solveNQueen(int board[][], int col, int
N)
{
if (col >= N)
return true;
for (int i = 0; i < N; i++) {
//if it is safe to place the queen at position i,col -> place
it
if (isSafe(board, i, col,N)) {
board[i][col] = 1;
if (solveNQueen(board, col + 1,N))
return true;
//backtrack if the above condition is false
board[i][col] = 0;
}
}
return false;
}
public static void main(String args[])
{
int N;
Scanner in=new Scanner(System.in);
//System.out.print()
System.out.println("Enter the value of N");
N=in.nextInt();
int board[][] = new int[N][N];
for (int i = 0; i <N; i++)
for (int j = 0; j < N; j++)
board[i][j] = 0;
if (!solveNQueen(board, 0,N)) {
System.out.print("Solution does not exist");
return;
}
printSolution(board,N);
}
}
OUTPUT COMPILED: