题目描述
在 n*n 格的国际象棋上摆放 个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同
一列或同一斜线上,如下图(a)所以示
(b)是一个可行解,用序列 2 4 1 3 来表示,第 i 个数表示在第 i 行的相应位置有一个棋子。 这只是 4 皇后问题的一个解。请编一个程序找出 n 皇后的所有解。
输入格式
一行一个整数 n。
输出格式
按题目所说的序列方法输出,解按字典顺序排列。请输出前 3 个解(不足 3 个就全部输出)。最后一行是解的总个数。
样例
样例输入
4
样例输出
2 4 1 3
3 1 4 2
2
数据范围与提示
N <= 20
#include
using namespace std;
int w[50],a[25],z[25],n[50],f;
int m;
void dfs(int step){if(step==f+1){m++;if(m<=3){for(int i=1;i<=f;++i){cout<for(int i=1;i<=f;++i){if(z[i]==0&&w[step-i+f]==0&&n[step+i]==0){a[step]=i;z[i]=1;w[step-i+f]=1;n[step+i]=1;dfs(step+1);z[i]=0;w[step-i+f]=0;n[step+i]=0;}}}
}
int main(){freopen("B.in","r",stdin);freopen("B.out","w",stdout);cin>>f;dfs(1);cout<
上一篇:SQL优化的几种方法
下一篇:轻量应用服务器部署vue项目