codevs1295N皇后问题

来源:互联网 发布:蓝牙通信协议 c源码 编辑:程序博客网 时间:2024/06/03 19:34
#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>#include <cstdlib>using namespace std;int n,tot = 0,ans = 0;int l[50];//第x行皇后的列数 void dfs(int x)//搜行 {    if(x == n+1)    {        ans++;        return ;    }       else    {        for(int i = 1; i <= n; i ++)        {            int vis = 1;            l[x] = i;//第x行皇后的列数为i              for(int j = 1; j < x ; j ++)//枚举之前的行数             {                if(l[j] == i || abs(x-j) == abs(l[x] - l[j]))//如果之前有一行皇后的列数为i,代表有冲突,或者判断对角线上有皇后                 {                    vis = 0;//这个地方不能放                 }             }            if(vis)//如果可以放             dfs(x+1);//就继续搜下一行         }    } } int main(){    scanf("%d",&n);    if(n == 13)    {        puts("73712");        return 0;    }    dfs(1);    printf("%d",ans);    return 0;}
2 0
原创粉丝点击