n皇后问题

来源:互联网 发布:mac windows 共享软件 编辑:程序博客网 时间:2024/06/05 18:54

【问题描述】

     在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。可以把八皇后问题拓展为n皇后问        题,即在n*n的棋盘上摆放n个皇后,使其任意两个皇后都不能处于同一行、同一列或同一斜线上。

【输入描述】

     输入n;

【输出描述】

     输出放置的每种方案;

很简单的代码

#include<cstdio>#include<algorithm>using namespace std;int a[1000];int n;bool flag1[1000],flag2[1000],flag3[1000];void read(){scanf("%d",&n);for(int i=1;i<=1000;i++){//scanf("%d%d%d%d",&x1,&y1,&x2,&y2);flag1[i]=true;//分别记录同行 同列 同斜线 flag2[i]=true;flag3[i]=true;}}void dfs(int k){if(k>n){for(int i=1;i<=n;i++){printf("%d",a[i]);}        printf("\n");}else{for(int i=1;i<=n;i++)    {    if(flag1[i] && flag2[i+k] && flag3[k-i+n])    {    a[k]=i;    flag1[i]=false;    flag2[i+k]=false;    flag3[k-i+n]=false;    dfs(k+1);    flag1[i]=true;    flag2[i+k]=true;    flag3[k-i+n]=true;    //flag[i]=true;    }    }}}int main(){read();dfs(1);return 0;}



0 0