FZOJ1095 N皇后

来源:互联网 发布:java实用教程第四版pdf 编辑:程序博客网 时间:2024/06/16 08:39

简单的搜索。

#include<cstdio>int n,cnt=0,pai[20]={0},pyb=1;bool lie[20]={false},zuo[20]={false},you[35]={false};//要特别注意斜右数组大小,否则会爆空间void dfs(int t){    if(t>n)    {        if(pyb<=3)//只输出3组数据        {            pyb++;            for(int i=1;i<=n;i++)printf("%d ",pai[i]);printf("\n");        }        cnt++;        return;    }    for(int i=1;i<=n;i++)    if(lie[i]==false&&zuo[i+t]==false&&you[i-t+n]==false)    {        pai[t]=i;lie[i]=true;zuo[i+t]=true;you[i-t+n]=true;        dfs(t+1);        pai[t]=0;lie[i]=false;zuo[i+t]=false;you[i-t+n]=false;    }    return;}int main(){    scanf("%d",&n);    dfs(1);    printf("%d",cnt);    return 0;}