0

I have written a program for the 8-Queens problem.It prints all possible solutions.

queens() finds all the possible solutions. ok() tells whether the given column and row is safe or not.

The very strange problem is:

'Count' won't increment. I have no idea why.

  #include<iostream.h>
    #include<stdlib.h>
    #include<conio.h>

    int arr[8][8]={0};
    int count=0;

    int ok(int k,int j)
    {
     int i,l;
     int tup[8]={0};

     for(i=0;i<k;i++)
     {
      for(l=0;l<8;l++)
      {
       if(arr[i][l]==1)
       tup[i]=l;
      }
     }

     for(i=0;i<k;i++)
     {
      if((abs(tup[i]-j)==abs(i-k))||(tup[i]==j)||(arr[i][j]==1))
      return 0;
     }

     return 1;

    }


    void queen(int i)
    {
     int j,k,temp;

     if(i==8)
     {
      count++;
      cout<<"Solution no. "<<count<<":\n";

      for(i=0;i<8;i++)
      {
       for(j=0;j<8;j++)
       {
        if(arr[i][j]==1)
        cout<<char(81);
        else
        cout<<"=";
        cout<<" ";
       }
       cout<<"\n";
      }
      cout<<"---------------\n";

      getch();

     }

     for(j=0;j<8;j++)
     {
      if(ok(i,j))
      {
       for(k=0;k<8;k++)
       arr[i][k]=0;
       arr[i][j]=1;
       queen(i+1);
      }
     }

     arr[i][j]=0;

    }



    int main()
    {
     int i,j;

     clrscr();

     queen(0);

     return 0;

    }
2
Contributors
1
Reply
2
Views
5 Years
Discussion Span
Last Post by deceptikon
2

I'll give you a hint: check your array indices where the element is being set to 0. You're overrunning one of your arrays and count happens to be at that address.

Votes + Comments
thanks. it works with a return; added in if(i==8)
This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.