N Queens not printing all solutions

My code works well but it only prints one solution. What should I do so I get all the solutions?
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
#include <iostream>
#define N 4
using namespace std;

void PrintBoard(int board[N][N])
{
    for(int i=0;i<N;i++)
     {for(int j=0;j<N;j++)
       cout<<board[i][j]<<" ";
       cout<<"\n";
     }
  cout<<"\n";
}

bool isSafe(int board[N][N], int col, int row)
{
    for(int i=0; i<col; i++)
        if(board[row][i])
         return false;

     for(int i=row, j=col; i>=0 && j>=0; i--, j--)
        if(board[i][j])
         return false;

     for (int i=row, j=col; i<N && j>=0; i++, j--)
        if(board[i][j])
         return false;

     return true;
}

 bool Solver(int board[N][N],int col)
 {
     if(col==N)
       return true;

     for(int i=0; i<N; i++)
        if(isSafe(board, col , i))
         {
           board[i][col]=1;

             if(Solver(board,col+1))
               return true;

           board[i][col]=0;
         }
   return false;
  }

 bool Check()
 {  int board[N][N];
     for(int i=0; i<N; i++)
        for(int j=0; j<N; j++)
         board[i][j]=0;
     if(Solver(board,0) == false)
       {
           cout<<"No possible output!";
           return false;
       }
      PrintBoard(board);
       return true;

 }


int main()
{
   Check();
    return 0;
}
You're terminating the execution on your first solution.

Replace return false on line 58 and return true on line 61 with continue. Also change bool Check() to void Check() as no one cares what it returns.
Last edited on
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
#include <iostream>
using namespace std;

const int N = 4;

void PrintBoard(int board[N][N]) {
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++)
            cout << board[i][j] << ' ';
        cout << '\n';
    }
    cout << '\n';
}

bool isSafe(int board[N][N], int col, int row) {
    for (int i = 0; i < col; i++)
        if (board[row][i])
             return false;
    for(int i = row, j = col; i >= 0 && j >= 0; i--, j--)
        if (board[i][j])
             return false;
    for (int i = row, j = col; i < N && j >= 0; i++, j--)
        if (board[i][j])
            return false;
    return true;
}

void Solver(int board[N][N], int col) {
    if (col == N)
        PrintBoard(board);
    else
        for (int i = 0; i < N; i++)
            if (isSafe(board, col, i)) {
                board[i][col] = 1;
                Solver(board, col + 1);
                board[i][col] = 0;
            }
}

void Check() {
    int board[N][N];
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            board[i][j] = 0;
    Solver(board, 0);
}

int main() {
    Check();
}

Thanks!
Topic archived. No new replies allowed.