• P1219 N皇后(位运算&普通dfs)


    题见洛谷

    位运算版(设计巧妙,需要回顾,加深理解)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<vector>
    #include<queue>
    using namespace std;
    int a[20];
    int ans=0,uplimit,n;
    void print()
    {
    
        for(int i=1;i<=n;i++)
        {
            int x=0;int y=a[i];
            while(y)
            {
                y=y>>1;
                x++;
            }
            printf("%d ",x);
        }
        puts("");   
    }
    void dfs(int r,int ld,int rd)
    {
        if(r==uplimit){
            ans++;
            if(ans<=3)
                 print();
            return;
        } 
        int pos=uplimit & ~ (r|ld|rd);
    
        while(pos!=0)
        {
            int p=pos & (-pos);//pos=pos & (~pos+1); 
            pos-=p;
            a[++a[0]]=p;
            dfs(r+p,(ld+p)<<1,(rd+p)>>1);
            a[a[0]]=0;a[0]--;//回溯 
        }
    }
    int main()
    {
        scanf("%d",&n);
        uplimit=(1<<n)-1;
        dfs(0,0,0);
        printf("%d",ans);
        return 0;
    }

    普通版

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<cstring>
    #include<string>
    #include<cmath>
    using namespace std;
    int n;
    int ans[100];
    int tot=0;
    int fa[100],fl[20],fb[100];
    void dfs(int k)
    {
        if(k>n){
            if(tot<3){
                 for(int i=1;i<=n;i++)
                   printf("%d ",ans[i]);
                printf("
    ");
            }
            tot++;
        }
        else
        {
            for(int i=1;i<=n;i++)
            if(fl[i]==0&&fa[i+k]==0&&fb[i-k+n]==0)
            {
                ans[k]=i;
                fl[i]=1;
                fa[i+k]=1;
                fb[i-k+n]=1;
                dfs(k+1);
                fl[i]=0;
                fa[i+k]=0;
                fb[i-k+n]=0;
            }
        }
    
    
    }
    int main()
    {
        scanf("%d",&n);
        dfs(1);
        printf("%d",tot);
        return 0;
    }
  • 相关阅读:
    码云安装SSH私钥步骤
    关于在Python3中:字典在迭代过程中,字典的长度是不允许改变的
    Selenium ChromeDriver与Chrome版本映射表(更新到v78)
    web driver下载地址(selenium-3.141_浏览器版本对应)
    Python报错pip超时
    LoginRequiredMixin类
    pycharm断点调试django
    js克隆
    索引
    java8date
  • 原文地址:https://www.cnblogs.com/dfsac/p/6819775.html
Copyright © 2020-2023  润新知