2n皇后

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int wq[101][101],hq[101],bq[101];
int ccount,num;


int fbq(int pos){
for(int i = 0;i<pos-1;++i){
int ai = bq[i] - bq[pos-1];
if(ai == 0||ai == pos-1-i||-ai == pos-1-i){
return 0;
}
}
if(pos == num){
++ccount;
}
for(int i = 0;i<num;++i){
if(wq[pos][i] == 1&&i != hq[pos]){
bq[pos] = i;
fbq(pos+1);
}
}
}


int fhq(int pos){
for(int i = 0;i<pos-1;++i){
int ai = hq[i] - hq[pos-1];
if(ai == 0||ai == pos-1-i||-ai == pos-1-i){
return 0;
}
}
if(pos == num){
fbq(0);
return 0;}
for(int i = 0;i<num;++i){
if(wq[pos][i] == 1){
hq[pos] = i;
fhq(pos+1);
}
}
}


int main(){
cin>>num;
for(int i = 0;i<num;++i){
for(int j = 0;j<num;++j){
cin>>wq[i][j];
}
}
ccount = 0;
fhq(0);
cout<<ccount<<endl;
return 0;

猜你喜欢

转载自blog.csdn.net/dukig/article/details/79714533