经典sudoku问题

按部就班就好

一定要注意细节

大于1还是大于等于1

r c越界判断

judge时0的特判

blabla居然磨了2个小时

改了很多地方所以实现得有点冗余,反正能A吧

/*H E A D*/
int sudo[66][66];
char str[666];
int usedr[66][11];
int usedc[66][11];
int rsum[66],csum[66];
typedef pair<int,int> P;
P pos(int i,int j){
if(i>=1&&i<=3){
if(j>=1&&j<=3) return P(1,1);
if(j>=4&&j<=6) return P(1,4);
if(j>=7&&j<=9) return P(1,7);
}
if(i>=4&&i<=6){
if(j>=1&&j<=3) return P(4,1);
if(j>=4&&j<=6) return P(4,4);
if(j>=7&&j<=9) return P(4,7);
}
if(i>=7&&i<=9){
if(j>=1&&j<=3) return P(7,1);
if(j>=4&&j<=6) return P(7,4);
if(j>=7&&j<=9) return P(7,7);
}
}
int check2;
bool cal2(int nowr,int nowc,int num){
int sum=0;
if(rsum[nowr]+num>45||csum[nowc]+num>45)return 0;
P p=pos(nowr,nowc);
int sr=p.first,sc=p.second;
check2=0;
rep(i,1,9) if(sudo[nowr][i]==num){
++check2;
if(check2>=1)return 0;
}
check2=0;
rep(i,1,9) if(sudo[i][nowc]==num){
++check2;
if(check2>=1)return 0;
}
check2=0;
rep(i,sr,sr+2){
rep(j,sc,sc+2){
if(sudo[i][j]==num){
++check2;
if(check2>=1)return 0;
}
}
}
return 1;
}
int cnt=0;
bool dfs(int r,int c){
if(r==9&&c==10)return 1;
else if(c==10){
c=1;
r++;
if(r==10)return 1;
}
while(sudo[r][c]){
c++;
if(c==10){
c=1;
r++;
if(r==10)return 1;
}
}
rep(i,1,9){
if(usedr[r][i]||usedc[c][i]||cal2(r,c,i)==0){
continue;
}
if(!cal2(r,c,i))continue;
usedr[r][i]++;usedc[c][i]++;
rsum[r]+=i;csum[c]+=i;
sudo[r][c]=i;
if(dfs(r,c+1))return 1;
else{
usedr[r][i]--;usedc[c][i]--;
rsum[r]-=i;csum[c]-=i;
sudo[r][c]=0;
} }
return 0;
}
int main(){
int T=read();
while(T--){
memset(usedr,0,sizeof usedr);
memset(usedc,0,sizeof usedc);
memset(rsum,0,sizeof rsum);
memset(csum,0,sizeof csum);
rep(i,1,9){
s1(str);
rep(j,1,9) sudo[i][j]=str[j]-'0';
}
bool flag=0;
rep(i,1,9){
rep(j,1,9){
if(!sudo[i][j])continue;
if(++usedr[i][sudo[i][j]]>1){
flag=1;
}
if(++usedc[j][sudo[i][j]]>1){
flag=1;
}
rsum[i]+=sudo[i][j];
csum[j]+=sudo[i][j];
}
}
dfs(1,1);
rep(i,1,9){
rep(j,1,9){
print(sudo[i][j]);
}
enter;
}
}
return 0;
}

POJ - 2676 暴搜 注意实现细节的更多相关文章

  1. POJ 1945 暴搜+打表 (Or 暴搜+判重)

    思路: 呃呃 暴搜+打表 暴搜的程序::稳稳的TLE+MLE (但是我们可以用来打表) 然后我们就可以打表过了 hiahiahia 可以证明最小的那个数不会超过200(怎么证明的我也不知道),然后就直 ...

  2. POJ 1414 暴搜

    题意比较复杂 (但是很好理解) 大概意思是给你等边三角形(详见题目中的图). 最后一行有n个数,下一次要填的数是c. 里面预先已经填好了数字.(0为未填) 得分的标准是这个分数的连通块周围没有空的地方 ...

  3. POJ 3188暴搜

    题意: 思路: 裸的暴搜 --. 但是要注意如果你不用所有的按键就能输出最优解的话一定要把所有的字母都安排到一个位置-. 我的一群PE就是这么来的-- 为什么写的人这么少-- // by Sirius ...

  4. POJ 2132 暴搜OR Floyd

    题意: 给你一个邻接矩阵(n<=25)问所有1到2路径的gcd的lcm是多少. 一些经验(WA/TLE的经验): 1. 无脑暴搜 是会TLE的--. 2. 关于精度 dyf神牛说了:long l ...

  5. POJ 2133 暴搜

    题意: 思路: 按照题意暴搜 注意 如果目标串==给的串 答案是2 //By SiriurRen #include <cstdio> #include <cstring> #i ...

  6. POJ 1543 暴搜

    题意:输出a^3=b^3+c^3+d^3的所有a,b,c,d的值. b,c,d由小到大且b,c,d都大于1. 思路: 按照题意写就好.... // by SiriusRen #include < ...

  7. POJ 1950暴搜

    思路: 暴力枚举好了..每回判断一下-- 用long long会超时 但是10^20会爆int... 不过仔细想一想 超过10^9的数肯定拼不回0啊-- 猥琐用int AC了 (当然可以打表 ) // ...

  8. 深搜+回溯 POJ 2676 Sudoku

    POJ 2676 Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17627   Accepted: 8538 ...

  9. poj 3080 Blue Jeans(水题 暴搜)

    题目:http://poj.org/problem?id=3080 水题,暴搜 #include <iostream> #include<cstdio> #include< ...

随机推荐

  1. 【转】http 缓存

    原文地址:https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-c ...

  2. jq一行一行循环读取table中的元素

    获取当前tr行号,可依据index 获取当前tr对象 获取某一tr下td的内容

  3. django获取字段列表(values/values_list/flat)

    django获取字段列表(values/values_list/flat) values方法可以获取number字段的字典列表 values_list可以获取number的元组列表 values_li ...

  4. codefirst 关系处理

    1.http://www.cnblogs.com/libingql/archive/2013/01/31/2888201.html 2.多对多 protected override void OnMo ...

  5. 使用rpmbuild打包时不对文件进行strip操作

    使用rpmbuild打包时不对文件进行strip操作 摘自: https://www.ichenfu.com/2017/11/20/rpmbuild-not-strip/ By Chen Fu 发表于 ...

  6. (BST)升序数组变为BST树

    题目:给定一个数组,其中元素按升序排序,将其转换为高度平衡BST. 思路:因为是升序数组,那么中间的数字一定是根节点值,然后在对左右两边的数组进行查找根节点的递归.一次处理左右子树. /** * De ...

  7. oracle列出两个日期间所有日期

    select date '2010-1-1'+level-1 dates from dual connect by level <date '2010-1-10' -date '2010-1-1 ...

  8. MariaDB 数据库迁移

    一.为什么要迁移 我的七月小说站点放在JCloud上,恕我直言,配合我的Aliyun服务器进行数据交互,那是相当的慢,没办法,京东云上面十几块钱的公网ip,也就这样了. 所以我决定把web服务器和数据 ...

  9. c#设计模式之:组合模式(Composite)

    一:引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理,因为目录客园包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象和复合对象在功能上 ...

  10. 主流C语言编译器介绍