zoukankan      html  css  js  c++  java
  • BZOJ 4809: 皇后 搜索

    4809: 皇后

    Description

    众所不知,rly现在不会玩国际象棋。但是,作为一个OIer,rly当然做过八皇后问题。这里再啰嗦几句,皇后可以攻击到同行同列同对角线,在n*n的方格中摆n个皇后使其互不攻击到,求不同的解的数量,这就是经典的n皇后问题。现在问题推广到n皇后问题,这个问题对于你而言实在是小菜一叠。但因为上一次rly把棋盘弄破了,又拿不出新的,所以rly打算难一点点,问题就是破棋盘上的n皇后问题。他想知道……(你们懂的)。
    棋子都是相同的。

    Input

    一行,一个正整数N。
    接下来N行,每行N个数,要么为0,表示没坏,要么1,表示坏了。
    N<=16

    Output

    一行,输出不同的解的数量。

    Sample Input

    4
    1 0 1 1
    1 1 1 0
    0 1 1 1
    1 1 0 1

    Sample Output

    1

    思路:

      n皇后问题, 判一下不放即可。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int n;
    bool d[300],b[300],c[300];
    int sum,a[300];
    int map[18][18];
    void search(int i)
    {
        for(int j=1;j<=n;j++)
        {
            if((!b[j])&&(!c[i-j+n])&&(!d[i+j])&&(!map[i][j]))
            {
                a[i]=j;
                b[j]=1;
                c[i-j+n]=1;
                d[i+j]=1;
                if(i==n)
                    sum++;
                else
                    search(i+1);
                b[j]=0;
                c[i-j+n]=0;
                d[i+j]=0;
            }
        }
    }
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)scanf("%d", &map[i][j]);
        search(1);
        cout<<sum;
    }
    View Code
  • 相关阅读:
    python文件上传
    Django
    Python生产环境部署(fastcgi,uwsgi)
    tp3.2 自带的文件上传及生成缩略图功能
    图片上传--base64
    图片上传
    PHP处理大数据量老用户头像更新的操作--解决数据量大超时的问题
    mysql悲观锁处理赠品库存超卖的情况
    bzoj 3551: [ONTAK2010]Peaks加强版
    bzoj 4817: [Sdoi2017]树点涂色
  • 原文地址:https://www.cnblogs.com/Tobichi/p/9247700.html
Copyright © 2011-2022 走看看