#include<bits/stdc++.h>
using namespace std;
int a[9][9]={0};//定义地图
int h=1;
int hen(int c){//检测横向是否有皇后
for(int i=1;i<=8;i++){
if(a[c][i]==1){
return 1;
}
}
return 0;
}
int xie45(int c,int d){//检查右上方和左下方是否有皇后
for(int i=1;c<=8&&d>=1;i){//左下
if(a[c+=i][d-=i]==1){
return 1;
}
}
for(int i=1;c>=1&&d<=8;i){//右上
if(a[c-=i][d+=i]==1){
return 1;
}
}
return 0;
}
int xie135(int c,int d){//检查左上方和右下方是否有皇后
for(int i=1;1;i){//右下
c+=i;
d+=i;
if(c>8||d>8){
break;
}
if(a[c][d]==1){
return 1;
}
}
for(int i=1;1;i){//左上
c-=i;
d-=i;
if(c<1||d<1){
break;
}
if(a[c][d]==1){
return 1;
}
}
return 0;
}
int dfs(int d){
if(d==9){//输出地图
cout<<"No."<<" "<<h<<endl;
h++;
for(int i=1;i<=8;i++){
for(int j=1;j<=8;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
for(int i=1;i<=8;i++){
if(hen(i)){//检查横向
continue;
}
if(xie45(i,d)){//检查右上和左下
continue;
}
if(xie135(i,d)){//检查左上和右下
continue;
}
a[i][d]=1;
dfs(d+1);
a[i][d]=0;//还原
}
return 0;
}
int main(){
dfs(1);
return 0;
}
一本通----dfs经典例题八皇后代码参考
最新推荐文章于 2021-10-22 08:45:49 发布