N 皇后问题
在 N*N 的棋盘上放置 N 个皇后(n<=10)而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上
不能放置 2 个皇后),编程求解所有的摆放方法。

输入
输入:n
输出
每行输出一种方案,每种方案顺序输出皇后所在的列号,各个数占5个字符。若无方案,则输出
no solute!
no solute!
样例输入
4
样例输出
2 4 1 3
3 1 4 2
dfs策略
#include<bits/stdc++.h> using namespace std; int n,place[14]; bool a[14],b[14],c[14];//分别对横纵方向和斜线方向判重 void DPS(int s) { for(int k=1;k<=n;++k) { if(a[k]==0&&b[s+k]==0&&c[s-k+n-1]==0) { place[s]=k;//标记 a[k]=1; b[s+k]=1; c[s-k+n-1]=1; if(s==n) { for(int q=1;q<=n;++q) { printf("%5d",place[q]); } cout<<endl; } else { DPS(s+1); } a[k]=0;//回溯 b[s+k]=0; c[s-k+n-1]=0; } } } int main() { cin>>n; DPS(1); return 0; }

浙公网安备 33010602011771号