首页 > 其他分享 >HJ44 Sudoku

HJ44 Sudoku

时间:2024-09-02 20:14:48浏览次数:4  
标签:Sudoku sta 10 int num HJ44 struct

真开心,之前写过华为的数独题,直接提交就OK了=v=

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[10][10],mp[10][10][10],cnt_mp[10][10],num_sta=0,ans[10][10];
 4 bool b[10],fg[10],fd=0;
 5 struct Sta{
 6     int x,y;
 7 }sta[100];
 8 struct ID{
 9     int x,y;
10 }id[10][10];
11 void Dfs(int k){
12     if(k>num_sta){
13         fd=1;
14         for(int i=1;i<=9;i++)
15             for(int j=1;j<=9;j++)
16                 ans[i][j]=a[i][j];
17         return;
18     }
19     if(fd)return;
20     int x=sta[k].x,y=sta[k].y;
21     for(int i=1;i<=cnt_mp[x][y];i++){
22         if(fd)return;
23         int wl=mp[x][y][i];
24         for(int j=1;j<=9;j++)fg[j]=1;
25         for(int j=1;j<=9;j++)if(j!=y)fg[a[x][j]]=0;
26         if(fg[wl]==0) continue;
27         for(int j=1;j<=9;j++)fg[j]=1;
28         for(int j=1;j<=9;j++)if(j!=x)fg[a[j][y]]=0;
29         if(fg[wl]==0) continue;
30         for(int j=1;j<=9;j++)fg[j]=1;
31         for(int dx=-1;dx<=1;dx++){
32             for(int dy=-1;dy<=1;dy++){
33                 fg[a[id[x][y].x+dx][id[x][y].y+dy]]=0;
34             }
35         }
36         if(fg[wl]==0) continue;
37         a[x][y]=wl;
38         Dfs(k+1);
39         a[x][y]=0;
40     }
41     return;
42 }
43 int main(){
44     for(int i=1;i<=9;i++){
45         for(int j=1;j<=9;j++){
46             scanf("%d",&a[i][j]);
47             id[i][j].x=(((i+2)/3)-1)*3+2;
48             id[i][j].y=(((j+2)/3)-1)*3+2;
49         }
50     }
51     for(int i=1;i<=9;i++){
52         for(int j=1;j<=9;j++)
53             if(a[i][j]==0){
54                 sta[++num_sta].x=i;
55                 sta[num_sta].y=j;
56                 for(int k=1;k<=9;k++)b[k]=1;
57                 for(int k=1;k<=9;k++){
58                     if(a[i][k]) b[a[i][k]]=0;
59                     if(a[k][j]) b[a[k][j]]=0;
60                 }
61                 for(int dx=-1;dx<=1;dx++){
62                     for(int dy=-1;dy<=1;dy++){
63                         b[a[id[i][j].x+dx][id[i][j].y+dy]]=0;
64                     }
65                 }
66                 for(int k=1;k<=9;k++)
67                     if(b[k]){
68                         cnt_mp[i][j]++;
69                         mp[i][j][cnt_mp[i][j]]=k;
70                     }
71             }
72     }
73     Dfs(1);
74     for(int i=1;i<=9;i++){
75         for(int j=1;j<=9;j++)printf("%d ",ans[i][j]);
76         puts("");
77     }
78     return 0;
79 }

 

标签:Sudoku,sta,10,int,num,HJ44,struct
From: https://www.cnblogs.com/AlenaNuna/p/18393448

相关文章

  • 题解:P10481 Sudoku
    Sudoku来自蓝书思路优化搜索顺序,位运算常数优化。优化搜索顺序数独问题的搜索很简单,“搜索状态”就是每个位置上填了什么数。在每个状态下,选择一个未填位置,检查那些填入仍能满足数独条件(合法)的数字。构成的新的局面即为该状态的“分支”。足够暴力的写法为依次对每个位置进......
  • [USACO11NOV]Binary Sudoku G 题解
    定义一个\(3\times3\)的表格\(a\),表示每个小九宫格内1的个数的奇偶状态。再定义两个长为\(9\)的数组\(c0,c1\),表示每行每列上1的个数的奇偶状态。当\(d_{i,j}\)取反时,会将\(a_{[\frac{i}{3}],[\frac{j}{3}]},c0_i,c1_j\)各取反一次。要将\(a_{i,j}\)全部变为0......
  • poj 2676 Sudoku(DFS+回溯+剪枝)
    2676--Sudoku(poj.org)#include<iostream>#include<cstring>usingnamespacestd;intt,row[10][10],col[10][10],grid[10][10],map[10][10];boolDFS(intr,intc){if(r==10)returntrue;boolflag=false;if(map[r][c]){if(c=......
  • (python)代码学习||2024.2.3||题目是codewars上的【Validate Sudoku with size `NxN`
    题目的要求是写一个Sudoku类,类中要有一个实例函数判断传给对象的二维数组是否符合数独规则题目链接:https://www.codewars.com/kata/540afbe2dc9f615d5e000425/python下面是写完题后看到的别人的解决方法fromitertoolsimportchainclassSudoku(object):def__init__......
  • 数独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......
  • 牛客[编程题] HJ44 Sudoku数独游戏
    HJ44Sudoku困难  通过率:27.56%  时间限制:1秒  空间限制:32M 描述问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个3X3粗线宫内的数字均含1-9,并且不重复。例如:输......
  • Valid Sudoku
    study/java#neetcodeValidSudokuList<Integer>list=newArrayList<>();Setseen=newHashSet();board[i][j]!='.'orboard[i][j]!="."InJava,youcannotuse==or!=tocomparestrings(orcharacters)directlylike......
  • cpp: Sudoku
     /*****************************************************************//***\fileConsoleSudoku.cppc++14*\brief九宫独数填充游戏*fromhttps://github.com/vaithak/Sudoku-Generator*\authorgeovindu*\dateJuly2023************************......
  • HJ44 Sudoku 数独 ”思维 搜索“
    数独要求:在横、竖、3x3矩阵内0-9不可重复出现重点思路实现方法是,填入一个数后下一步推算基于前面已经填好的数值的新矩阵。相当于在这一过程中不断更新初始值用于下一步计算。递归穷举,从第一个空开始填;再更新矩阵填下一个值,一直到最后一个空填完。回溯:查错花最多时间在:回溯没......
  • 「POJ3076」Sudoku TJ
    「POJ3076」SudokuTJ为什么要用DLX呢?DFS他不香吗!题意:略去不讲(数独还没玩过?滚回去玩吧!)思路:DFS,判断方案是否可行。\(9\times9\)的数独问题中,我们采用的策略是:优......