Please provide a working code and answers for the following

Please provide a working code and answers for the following question, Thanks!

Problem statement: Solve N-Queen problem using: 1) an iterative method, and 2) recursive method for N = 8 and N = 9. Your report should include: a) pseudocode for both methods, b) programs with comments, c) all solutions for N = 8 and 9 for both methods, d) comparing running time (in ms) for the following eight cases listed in the table, e) discussion on the reported running times.

Solution

Pseudo code for the iterative method:


bool PlaceQueens(){
int start = 0, col = 1;
int row2;
Stack s; //an integer stack

while(col <= 8){
bool placed = false;
for(int row = start+1; row <= 8; row++)

if can place queen in (row, col){

placed = true;

s.push(row);

col++;

break;

}

if(!placed){

If s.isEmpty() return false;

//backtrack to the previous queen

//and try to place her in a new spot

s.pop(row2);

start = row2;

col--;

}

else start = 0;

}

return true;

}

Program for iterative method

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<time.h>

#define TRUE 1
#define FALSE 0

void print_solution(int n,int x[])
{

   char c[10][10];
   int i,j;
   for(i=1;i<=n;i++)
   {
       for(j=1; j<=n; j++)
       {
           c[i][j]=\'-\';
       }
   }

   for(i=1;i<=n;i++)
   {
       c[i][x[i]]=\'Q\';
   }

   for( i=1;i<=n;i++)
   {
       for(j=1;j<=n;j++)
       {
           printf(\"\\t%c\",c[i][j]);
       }
           printf(\"\ \");
   }

}


int place(int x[],int k)
{ int i;
   for(i=1;i<k;i++)
   {
       if(x[i]==x[k]||i-x[i]==k-x[k]||i+x[i]==k+x[k])
       {
           return FALSE;
       }
   }
   return TRUE;
}

void nqueens(int n)
{
   int x[10];
   int count=0;
   int k=1;

   x[k]=0;

   while(k!=0)
   {

       x[k]=x[k]+1;
       while((x[k]<=n)&&(!place(x,k)))
       {

           x[k]=x[k]+1;
       }
       if(x[k]<=n)
       {
           if(k==n)
           {
               count++;
               printf(\"\ \\tSolution %d is : \ \ \ \",count);
               print_solution(n,x);

           }
           else
           {
               k++;
               x[k]=0;
          }
       }
       else
       {
           k--;
       }
   }
   return;
}


int main()
{
   int n;
   clock_t start,end;

   start=clock();
   printf(\"\ Enter the no. of Queens : \");
   scanf(\"%d\",&n);
   printf(\"\ \ \\t\\t\\t USING %d QUEEN\'S STRATEGY \ \ \",n);
   nqueens(n);
   end=clock();
   printf(\"\ The Time Complexity is : %f msec.\",(end-start)/CLK_TCK);
   getch();
}

Program for recursive method

/* C/C++ program to solve N Queen Problem using

   backtracking */

#define N 4

#include<stdio.h>

/* A utility function to print solution */

void printSolution(int board[N][N])

{

    for (int i = 0; i < N; i++)

    {

        for (int j = 0; j < N; j++)

            printf(\" %d \", board[i][j]);

        printf(\"\ \");

    }

}

/* A utility function to check if a queen can

   be placed on board[row][col]. Note that this

   function is called when \"col\" queens are

   already placed in columns from 0 to col -1.

   So we need to check only left side for

   attacking queens */

bool isSafe(int board[N][N], int row, int col)

{

    int i, j;

    /* Check this row on left side */

    for (i = 0; i < col; i++)

        if (board[row][i])

            return false;

    /* Check upper diagonal on left side */

    for (i=row, j=col; i>=0 && j>=0; i--, j--)

        if (board[i][j])

            return false;

    /* Check lower diagonal on left side */

    for (i=row, j=col; j>=0 && i<N; i++, j--)

        if (board[i][j])

            return false;

    return true;

}

/* A recursive utility function to solve N

   Queen problem */

bool solveNQUtil(int board[N][N], int col)

{

    /* base case: If all queens are placed

      then return true */

    if (col >= N)

        return true;

    /* Consider this column and try placing

       this queen in all rows one by one */

    for (int i = 0; i < N; i++)

    {

        /* Check if queen can be placed on

          board[i][col] */

        if ( isSafe(board, i, col) )

        {

            /* Place this queen in board[i][col] */

            board[i][col] = 1;

            /* recur to place rest of the queens */

            if ( solveNQUtil(board, col + 1) )

                return true;

            /* If placing queen in board[i][col]

               doesn\'t lead to a solution, then

               remove queen from board[i][col] */

            board[i][col] = 0; // BACKTRACK

        }

    }

     /* If queen can not be place in any row in

        this colum col then return false */

    return false;

}

/* This function solves the N Queen problem using

   Backtracking. It mainly uses solveNQUtil() to

   solve the problem. It returns false if queens

   cannot be placed, otherwise return true and

   prints placement of queens in the form of 1s.

   Please note that there may be more than one

   solutions, this function prints one of the

   feasible solutions.*/

bool solveNQ()

{

    int board[N][N] = { {0, 0, 0, 0, 0, 0, 0, 0},

        {0, 0, 0, 0, 0, 0, 0, 0},

        {0, 0, 0, 0, 0, 0, 0, 0},

        {0, 0, 0, 0, 0, 0, 0, 0}

  {0, 0, 0, 0, 0, 0, 0, 0}

  {0, 0, 0, 0, 0, 0, 0, 0}

  {0, 0, 0, 0, 0, 0, 0, 0}

    };

    if ( solveNQUtil(board, 0) == false )

    {

      printf(\"Solution does not exist\");

      return false;

    }

    printSolution(board);

    return true;

}

// driver program to test above function

int main()

{

    solveNQ();

    return 0;

}

Algorithm for recursion

1) Start in the leftmost column
2) If all queens are placed
return true
3) Try all rows in the current column. Do following for every tried row.
a) If the queen can be placed safely in this row then mark this [row,
column] as part of the solution and recursively check if placing
queen here leads to a solution.
b) If placing queen in [row, column] leads to a solution then return
true.
c) If placing queen doesn\'t lead to a solution then umark this [row,
column] (Backtrack) and go to step (a) to try other rows.
3) If all rows have been tried and nothing worked, return false to trigger
backtracking.

Time complexity of the n - queen problem

Complexity of backtracking algorithm for n queens problem will be O(n!)

time taken for 8 queens problem = 9ms

all solutions = 92

time taken for 9 queens problem = 16ms

all solutions = 352

Please provide a working code and answers for the following question, Thanks! Problem statement: Solve N-Queen problem using: 1) an iterative method, and 2) rec
Please provide a working code and answers for the following question, Thanks! Problem statement: Solve N-Queen problem using: 1) an iterative method, and 2) rec
Please provide a working code and answers for the following question, Thanks! Problem statement: Solve N-Queen problem using: 1) an iterative method, and 2) rec
Please provide a working code and answers for the following question, Thanks! Problem statement: Solve N-Queen problem using: 1) an iterative method, and 2) rec
Please provide a working code and answers for the following question, Thanks! Problem statement: Solve N-Queen problem using: 1) an iterative method, and 2) rec
Please provide a working code and answers for the following question, Thanks! Problem statement: Solve N-Queen problem using: 1) an iterative method, and 2) rec
Please provide a working code and answers for the following question, Thanks! Problem statement: Solve N-Queen problem using: 1) an iterative method, and 2) rec

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site