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]; //總方案數(shù)和皇后
int search(int); //搜索
int print(); //輸出
int main()
{
search(1); //從第一步開始搜索
}
int search(int i)
{
int j;
for (j=1;j<=8;j++) //8個(gè)皇后
if ((!b[j])&&(!c[i+j])&&(!d[i-j+7]))
{
a[i]=j;
b[j]=1; //標(biāo)記位置
c[i+j]=1; //標(biāo)記位置
d[i-j+7]=1; //標(biāo)記位置
if (i==8) print(); //如果排完8個(gè)皇后就開始輸出
else search(i+1);
b[j]=0; //回溯
c[i+j]=0; //回溯
d[i-j+7]=0; //回溯
}
}
int print()
{
int i,j;
sum++; //總方案數(shù)累加
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;
}
}
搜索還是蠻難的,這個(gè)程序改了好多次,經(jīng)過老師的指導(dǎo)才AC掉。
c++很難,再加上我沒什么做題哈哈。