#include <stdio.h>
#define N 9999999
int a[N]; //a[i]表示第i行上的皇后放于a[i]列上,假设a[3]=7
int cnt;
int n=8; //皇后数量
void print(int);
bool check(int x,int y){
for(int k=1;k<=x;k++){
if(a[k]==y || k+a[k]==x+y || k-a[k]==x-y)
return false;
}
return true;
}
void dfs(int row){ //表示第row行皇后放于何处
if(row==n+1){
cnt++;
print(cnt);
return;
}
for(int i=1;i<=n;i++){
if(check(row,i)){
a[row]=i;
dfs(row+1);
a[row]=0;
}
}
}
void print(int cnt){
printf("No.%d\n",cnt);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i]==j)
printf(" Q ");
else
printf(" . ");
}
printf("\n");
}
printf("\n");
}
int main(void){
dfs(1);
return 0;
}
递归求解N皇后
最新推荐文章于 2024-09-12 00:41:57 发布