#include<iostream>
using namespace std;
int v[100][3]={0}, p[50]={0};
int n, k=0, total=0;
void dfs(int c){
if(c==k) total++;
else {
int cur = p[c];
for(int i=0;i<8;i++){
if(!v[i][0]&&!v[cur-i+8][1]&&!v[cur+i][2])
{
v[i][0]=v[cur-i+8][1]=v[cur+i][2]=1;
dfs(c+1);
v[i][0]=v[cur-i+8][1]=v[cur+i][2]=0;
}
}
}
}
int main(){
int x,i,j;
for(i=0;i<8;i++)//行
{
int flag=1;//标签
for(j=0;j<8;j++)//列
{
cin >> x;
if(x==1)//如果摆放了皇后
{
v[j][0] = v[i-j+8][1] = v[i+j][2] = 1;
flag = 0;
}
}
if(flag)//每一行进行判断
{
p[k++]=i;//存入已摆放皇后的行号
}
}
dfs(0);
cout << total << endl;
return 0;
}
第一次在CSDN上发个文章,这道题简单的搜索下就OK了
大家加油~
其实我也写了好久好久,我太菜了