thanks guys On Fri, Sep 2, 2011 at 1:53 AM, Don <dondod...@gmail.com> wrote:
> There are several issues. > There is nothing to back out a move if it fails. After the recursive > call to queen, you need an "else" which unmarks the board. That will > be hard to do, because there isn't a good way to remember what was > marked before. > I don't think you need to loop i from p to 7. The parameter p should > indicate the row where you will place the queen. Each row gets one > queen, so just select a column on that row. > Count is incremented every time that you try a location, so all the > rejected positions will still be in the position array. > Your function never returns false. > Below is working code. > > Don > > // Solve 8 queens problem. queens[i] will contain the column of the > queen in row i. > bool placeQueens(int row, int *queens) > { > if (row == 8) return true; > > // Look for locations to place queen on current row > for(queens[row] = 0; queens[row] < 8; ++queens[row]) > { > // Determine if previously placed queens are attacking that > location > for(int i = 0; i < row; ++i) > if ((queens[row] == queens[i]) || > (queens[row] == (queens[i]-row+i)) || > (queens[row] == (queens[i]+row-i))) > break; > > // Try to fill remaining rows > if ((i == row) && placeQueens(row+1, queens)) return true; > } > // No solution found. Backtrack and try something else. > return false; > } > > On Sep 1, 2:30 pm, mc2 verma <qlearn...@gmail.com> wrote: > > hey guys , > > > > I am trying to solve 8-queens problem using backtracking. Here is my > algo. > > Could someone please tell me what is wrong in this code?? > > > > bool queen(int p,int count , int position[][]) > > { > > if(count == 8) return true; > > > > for(int i=p,i<8;i++) > > for(int j=0;j<8;j++) > > if(marked(i,j) == false ) // finding secure position on board > > { > > markboard(i,j); // if found any secure position > then > > mark all board positions which are in range of queen. > > position[count][count]={i,j}; //save position for final > answer > > count++; > > if(queen(p+1,count,position[][]) == true) > > return true; > > } > > > > } > > -- > You received this message because you are subscribed to the Google Groups > "Algorithm Geeks" group. > To post to this group, send email to algogeeks@googlegroups.com. > To unsubscribe from this group, send email to > algogeeks+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/algogeeks?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.