n-皇后问题是指将 n 个皇后放在 n∗n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
现在给定整数n,请你输出所有的满足条件的棋子摆法。
#include<bits/stdc++.h> using namespace std; int p[100],n[100]; int l[100]; int a; int ma[100]; void out() { for(int i=1;i<=a;i++) { for(int j=1;j<=a;j++) if(j!=ma[i])printf("."); else printf("Q"); puts(""); } puts(""); } void dfs(int x) { if(x>a)out(); else for(int i=1;i<=a;i++) if(!l[i]&&(!p[x+i])&&(!n[x-i+a])) { l[i]=p[x+i]=n[x-i+a]=1; ma[x]=i; dfs(x+1); l[i]=p[x+i]=n[x-i+a]=0; } } int main() { cin>>a; dfs(1); return 0; }