zoukankan      html  css  js  c++  java
  • 【刷题】【搜索】新数独

    很暴力的搜索,还没有什么剪枝......

    心得:

    【1】如果只查询和修改,用bool比bitset快

    【2】rnt在循环中会比int快

    【3】减少简单的函数调用

    #include<cstdio>
    #include<cstdlib>
    #include<bitset>
    #include<iostream>
    #define rnt register int 
    using namespace std;
    int ans[10][10];
    char mp[2][10][10];//0表示左右,1表示上下 
    bool fx[10][10],fy[10][10],fbl[10][10];
    
    void dfs(int x,int y,int bl)//行,列,方格号 
    {
        if(bl>9)
        {
            for(rnt i=1;i<=9;i++,printf("
    "))
                for(rnt j=1;j<=9;j++)
                    printf("%d ",ans[i][j]);
            exit(0);
        }
        //真实坐标 
        int tx=(bl-1)/3*3 +x;
        int ty=(bl-1)%3*3 +y;
        int mn=0,mx=10;
        if(y>1)
            if(mp[0][tx][ty]=='>') mx=min(mx,ans[tx][ty-1]);
            else mn=max(mn,ans[tx][ty-1]);
        if(x>1)
            if(mp[1][tx][ty]=='v') mx=min(mx,ans[tx-1][ty]);
            else mn=max(mn,ans[tx-1][ty]);
        //可选范围 
        int nxx=x,nxy=y+1,nxbl=bl;
        if(nxy>3) nxy=1,nxx++;
        if(nxx>3) nxx=1,nxbl++;
        
        for(rnt nm=mn+1;nm<mx;nm++ )
        {
            if(fx[tx][nm] || fy[ty][nm] || fbl[bl][nm] ) continue;
            
            ans[tx][ty]=nm;
            fx[tx][nm] = fy[ty][nm] = fbl[bl][nm] =1;
            dfs(nxx,nxy,nxbl);
            fx[tx][nm] = fy[ty][nm] = fbl[bl][nm] =0;
            ans[tx][ty]=0;
        }
    }
    
    int main()
    {
        for(int i=1;i<=9;i++)
        {
            if(i%3!=1)
            for(int j=1;j<=9;j++)
                cin>>mp[1][i][j];
            for(int k=0;k<3;k++)
                cin>>mp[0][i][k*3+2]>>mp[0][i][k*3+3];
        }
        
        dfs(1,1,1);    
        return 0;
    }
  • 相关阅读:
    牛客寒假算法集训 1
    求逆序数——树状数组
    牛客网 被3整除的子序列 区间dp
    SICNU 2019 winter training #2(codeforces #531 Div3)
    iOS 给已有的类添加属性.
    coredata实践
    IOS 数据库升级
    获取当前屏幕显示的viewcontroller
    ios 自顶一个view
    mac 修改文件夹权限.
  • 原文地址:https://www.cnblogs.com/xwww666666/p/11771724.html
Copyright © 2011-2022 走看看