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;
}