查看完整版本: 我编了个c++的八皇后问题,希望大家批评指正

changchungg 2008-8-16 20:12

我编了个c++的八皇后问题,希望大家批评指正

// Note:Your choice is C++ IDE
// 八皇后问题
#include <iostream>
using namespace std;
const int N = 8;       //皇后数目
const int True = 1;
const int False = 0;
int main()
{
    int queen[N+1];    //第i行皇后所在列数
    queen[0]=0;        //放置的方法总数
    queen[1]=1;        //先放第一个皇后
    queen[2]=0;        //改变第i个皇后时总将第i+1个皇后位置初始化为0
    int num=2;         //将放置第2个皇后
    int available;     //放置皇后位置是否合法
    while(num>=1)       //||queen[1]>0
    {   //放第num个皇后,也就是使queen[num]=i
     for(int i=queen[num]+1;i<=N;i++)
     {
      available=True;
      for(int j=1;j<num;j++)
       if(i==queen[j]||queen[j]-j==i-num||queen[j]+j==i+num)
       { available=False; break; }
      if(available) break;
     }
     if(available)
     {
      queen[num++]=i;
      if(num<=N)      //革命尚未成功,仍需继续探索
       queen[num]=0;
      else
      {
       cout<<"Answer "<<++queen[0]<<" : ";
       for(i=1;i<=N;)
        cout<<queen[i++]<<" ";
       cout<<endl;
       //得到结果后只移动第N个皇后将无意义
       num-=2;      //num=N-1
       queen[N]=0;
       available=False;
      }
     }
     else                 //第num个皇后没地方放,需改变第num-1个皇后位置
      queen[num--]=0;
    }
    cout<<"Total : "<<queen[0]<<endl;
    return 0;
}
页: [1]
查看完整版本: 我编了个c++的八皇后问题,希望大家批评指正