首页 > 其他分享 >poj 2676 Sudoku(DFS+回溯+剪枝)

poj 2676 Sudoku(DFS+回溯+剪枝)

时间:2024-02-14 22:22:21浏览次数:32  
标签:剪枝 map int DFS flag 2676 row Sudoku 10

2676 -- Sudoku (poj.org)

#include<iostream>
#include<cstring>
using namespace std;
int t,row[10][10],col[10][10],grid[10][10],map[10][10];
bool DFS(int r,int c){
    if(r==10) return true;
    bool flag=false;
    if(map[r][c]){
        if(c==9) flag=DFS(r+1,1);
        else flag=DFS(r,c+1);
        return flag;
    }else{
        int k=((r-1)/3)*3+(c-1)/3+1;
        for(int i=1;i<=9;i++){
            if(!row[r][i]&&!col[c][i]&&!grid[k][i]){
                map[r][c]=i;
                row[r][i]=true;
                col[c][i]=true;
                grid[k][i]=true;
                if(c==9) flag=DFS(r+1,1);
                else flag=DFS(r,c+1);
                if(!flag){
                    map[r][c]=false;
                    row[r][i]=false;
                    col[c][i]=false;
                    grid[k][i]=false;
                }else return flag;
            }
        }
    }
    return false;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>t;
    while(t--){
        memset(row,0,sizeof(row));    
        memset(col,0,sizeof(col));
        memset(grid,0,sizeof(grid));
        for(int i=1;i<=9;i++){
            for(int j=1;j<=9;j++){
                char ch;
                cin>>ch;
                map[i][j]=ch-'0';
                if(map[i][j]){
                    row[i][map[i][j]]=true;
                    col[j][map[i][j]]=true;
                    int k=((i-1)/3)*3+(j-1)/3+1;
                    grid[k][map[i][j]]=true;
                }
            }
        }
        DFS(1,1);
        for(int i=1;i<=9;i++){
            for(int j=1;j<=9;j++){
                cout<<map[i][j];
            }
            cout<<endl;
        }
    }    
    return 0;
}

 

标签:剪枝,map,int,DFS,flag,2676,row,Sudoku,10
From: https://www.cnblogs.com/accbulb/p/18015709

相关文章

  • P2676 [USACO07DEC] Bookshelf B
    1.题目介绍[USACO07DEC]BookshelfB题目描述FarmerJohn最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了。现在,只有书架的顶上还留有一点空间。所有\(N(1\leN\le20,000)\)头奶牛都有一个确定的身高\(H_i(1\leH_i......
  • Poj 2531 Network Saboteur(DFS+剪枝)
    2531--NetworkSaboteur(poj.org)#include<iostream>#include<cstring>usingnamespacestd;constintN=30;intC[N][N],n,ans;boolgroup[N];voidDFS(intnum,intsum){group[num]=true;inttmp=sum;for(inti=1;i<=n;i++){......
  • (python)代码学习||2024.2.3||题目是codewars上的【Validate Sudoku with size `NxN`
    题目的要求是写一个Sudoku类,类中要有一个实例函数判断传给对象的二维数组是否符合数独规则题目链接:https://www.codewars.com/kata/540afbe2dc9f615d5e000425/python下面是写完题后看到的别人的解决方法fromitertoolsimportchainclassSudoku(object):def__init__......
  • 洛谷题单指南-排序-P2676 [USACO07DEC] Bookshelf B
    原题链接:https://www.luogu.com.cn/problem/P2676题意解读:要使能够到书架顶的牛数量最少,优先选高的牛即可,直到总身高超过书架高度,简单的排序+贪心,下面给出代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=20005;inth[N];intn,b;intmain......
  • GaussDB(for MySQL)剪枝功能,让查询性能提升70倍!
    作者,祝青平,华为云数据库内核高级工程师。擅长数据库优化器内核研发,9年数据库内核研发经验,参与多个TP以及AP数据库的研发工作。近日,华为云数据库社区下面有这样一条用户提问留言:请问,如何通过MySQL提升DISTINCT,尤其是多表连接下DISTINCT的查询效率?在回答这个问题之前,我们先了解一......
  • GaussDB(for MySQL)剪枝功能,让查询性能提升70倍!
    作者,祝青平,华为云数据库内核高级工程师。擅长数据库优化器内核研发,9年数据库内核研发经验,参与多个TP以及AP数据库的研发工作。近日,华为云数据库社区下面有这样一条用户提问留言:请问,如何通过MySQL提升DISTINCT,尤其是多表连接下DISTINCT的查询效率?在回答这个问题之前,我们先了解一下DI......
  • 不搜索,无问题。冗余、上下界剪枝
    公众号:编程驿站1.搜索算法本文和大家聊聊搜索算法,计算机解决问题的抽象流程是,先搜索,或完全搜索后得到答案,或边搜索边找答案。所以,对给定的数据集进行搜索是解决问题的前置条件。不搜索,无问题。搜索算法无非就是线性、二分、深度、广度搜索算法。其它的搜索算法的底层逻辑也是建......
  • 数独Sudoku游戏解题C语言和Golang(Go语言)实现
    Go语言实现packagemainimport( "fmt" "os")const( N=9 EmptyCell='0')funcmain(){ iflen(os.Args)!=2||len(os.Args[1])!=81{ fmt.Println("错误:程序需要一个正好包含81位数字的参数。") os.Exit(1) } boa......
  • 回溯过程中降重剪枝
    这题跟之前组合问题不同之处在于给的数组里面的元素是有重复的。如果按照之前方法处理的话,就会得到重复的集合。看了卡哥的方法,知道这个去重是是树层去重,横向的;不是树枝去重,纵向的。这除了和前一个元素比较,还要加一个visit数组。如果前一个元素的visit是false就符合条件。这......
  • Alpha-Beta剪枝的原理的深入理解(无图预警)
    转载请注明原文链接:https://www.cnblogs.com/Multya/p/17929261.html考虑一个树:一棵树上只有叶子节点有值,有确定的根节点的位置根据层数来划分叶子节点和根节点之间的链接节点偶数层上的值取子节点的最大值,奇数取最小因为叶子节点上的值确定,在有这么个规则之后整棵树上所......