NOI 2.5基本算法之搜索 1700:八皇后问题 编程样例
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<iomanip>
using namespace std;
bool d[16]={0},b[9]={0},c[16]={0}; //排列的三种情况
int sum=0,a[9]; //总方案数和皇后
int search(int); //搜索
int print(); //输出
int main()
{
search(1); //从第一步开始搜索
}
int search(int i)
{
int j;
for (j=1;j<=8;j++) //8个皇后
if ((!b[j])&&(!c[i+j])&&(!d[i-j+7]))
{
a[i]=j;
b[j]=1; //标记位置
c[i+j]=1; //标记位置
d[i-j+7]=1; //标记位置
if (i==8) print(); //如果排完8个皇后就开始输出
else search(i+1);
b[j]=0; //回溯
c[i+j]=0; //回溯
d[i-j+7]=0; //回溯
}
}
int print()
{
int i,j;
sum++; //总方案数累加
cout<<"No. "<<sum<<endl; //输出
for (j=1;j<=8;j++)
{
for(i=1;i<=8;i++)
if(a[i]==j) cout<<"1 "; //如果可以放,输出1
else cout<<"0 "; //否则输出0
cout<<endl;
}
}
搜索还是蛮难的,这个程序改了好多次,经过老师的指导才AC掉。
c++很难,再加上我没什么做题哈哈。