nqueen问题

    技术2022-05-11  110

     

    #include  < iostream > #include  < cmath > using   namespace  std; class  nQueensPuzzle {public:    nQueensPuzzle(int queens=8);    bool canPlaceQueen(int k,int i);    void queensConfiguration(int k);    void printConfiguration();    int solutionsCount();private:    int noOfSolutions;    int noOfQueens;    int *queensInRow;} ;nQueensPuzzle::nQueensPuzzle( int  queens) // 构造函数 {    noOfQueens=queens;    queensInRow=new int[noOfQueens];    noOfSolutions=0;} bool  nQueensPuzzle::canPlaceQueen( int  k, int  i) // 检查第k行第i列是否能放皇后 {    for(int j=0;j<k;j++)        if((queensInRow[j]==i)||(abs(queensInRow[j]-i)==abs(j-k)))            return false;        return true;} void  nQueensPuzzle::queensConfiguration( int  k) // 如何放皇后,将所有的方法找出来 {    for(int i=0;i<noOfQueens;i++)    {        if(canPlaceQueen(k,i))        {            queensInRow[k]=i;            if(k==noOfQueens-1)                printConfiguration();            else                queensConfiguration(k+1);        }    }} void  nQueensPuzzle::printConfiguration() // 将每一种方法打印出来 {    noOfSolutions++;    cout<<"(";    for(int i=0;i<noOfQueens-1;i++)        cout<<queensInRow[i]<<",  ";    cout<<queensInRow[noOfQueens-1]<<")";    cout<<endl;} int  nQueensPuzzle::solutionsCount() // 返回方法数 {    return noOfSolutions;} void  main() {    nQueensPuzzle queen(8);    queen.queensConfiguration(0);    queen.printConfiguration();    cout<<"共有"<<queen.solutionsCount()<<"种方法。";} #include < iostream.h > #include < math.h > int  sum  = 0 ; int  x[ 9 ]; int  place ( int  t) {    for(int i=1;i<t;i++)        if(x[i]==x[t] ||abs(t-i)==abs(x[t]-x[i]))            return 0;        return 1;} void  nQueen() {    int i,j,k=1;    for(i=0;i<9;i++)        x[i]=0;    while(k>0)    {        x[k]++;        while(x[k]<=8&&!place(k))            x[k]++;        if(x[k]<=8)        {            if(k==8)            {                for(i=0;i<8;i++)                    cout<<"+-";                cout<<"+ ";                for(i=1;i<=8;i++)                {                    for(j=1;j<=8;j++)                    {                        if(j==x[i])                            cout<<"|Q";                        cout<<"";                    }                    cout<<" ";                }                for(i=0;i<8;i++)                    cout<<"+-";                cout<<"+ ";                sum++;            }            else            {                k++;                x[k]=0;            }        }        else            k--;    }} void  main() {    nQueen();    cout<<endl;    cout<<"N皇后问题一共有"<<sum<<"种解法 "<<endl;}

    最新回复(0)