POJ - 2676 暴搜 注意实现细节
经典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 暴搜 注意实现细节的更多相关文章
- POJ 1945 暴搜+打表 (Or 暴搜+判重)
思路: 呃呃 暴搜+打表 暴搜的程序::稳稳的TLE+MLE (但是我们可以用来打表) 然后我们就可以打表过了 hiahiahia 可以证明最小的那个数不会超过200(怎么证明的我也不知道),然后就直 ...
- POJ 1414 暴搜
题意比较复杂 (但是很好理解) 大概意思是给你等边三角形(详见题目中的图). 最后一行有n个数,下一次要填的数是c. 里面预先已经填好了数字.(0为未填) 得分的标准是这个分数的连通块周围没有空的地方 ...
- POJ 3188暴搜
题意: 思路: 裸的暴搜 --. 但是要注意如果你不用所有的按键就能输出最优解的话一定要把所有的字母都安排到一个位置-. 我的一群PE就是这么来的-- 为什么写的人这么少-- // by Sirius ...
- POJ 2132 暴搜OR Floyd
题意: 给你一个邻接矩阵(n<=25)问所有1到2路径的gcd的lcm是多少. 一些经验(WA/TLE的经验): 1. 无脑暴搜 是会TLE的--. 2. 关于精度 dyf神牛说了:long l ...
- POJ 2133 暴搜
题意: 思路: 按照题意暴搜 注意 如果目标串==给的串 答案是2 //By SiriurRen #include <cstdio> #include <cstring> #i ...
- POJ 1543 暴搜
题意:输出a^3=b^3+c^3+d^3的所有a,b,c,d的值. b,c,d由小到大且b,c,d都大于1. 思路: 按照题意写就好.... // by SiriusRen #include < ...
- POJ 1950暴搜
思路: 暴力枚举好了..每回判断一下-- 用long long会超时 但是10^20会爆int... 不过仔细想一想 超过10^9的数肯定拼不回0啊-- 猥琐用int AC了 (当然可以打表 ) // ...
- 深搜+回溯 POJ 2676 Sudoku
POJ 2676 Sudoku Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17627 Accepted: 8538 ...
- poj 3080 Blue Jeans(水题 暴搜)
题目:http://poj.org/problem?id=3080 水题,暴搜 #include <iostream> #include<cstdio> #include< ...
随机推荐
- 如何撤回经由Outlook2016刚发出的邮件
在Outlook2016中,刚发出了一封邮件,发现有问题,想撤回,如何处理? 在对方尚未查看和接收时,可撤回. 参考步骤 1.选中这封邮件,用鼠标双击打开 2.点Move旁边的下拉按钮 3.点击&qu ...
- CentOS7虚拟机安装Linux教程及安装后所遇到的问题
1.VMware Workstation15下载. 官方链接:http://download3.vmware.com/software/wkst/file/VMware-workstation-ful ...
- canvas时钟demo
显示效果如下 源码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- css溢出文本显示省略号
css div { width: 200px; height: 200px; border: 1px solid; /* 以下四条缺一不可 其中 display:block 为隐藏条件 */ disp ...
- c#事务的使用、示例及注意事项
什么是数据库事务 数据库事务是指作为单个逻辑工作单元执行的一系列操作. 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: · 更新客户所购商品的库存信息 · 保存客户付款信息--可能 ...
- reportng定制修改
定制目的 最近接口测试和UI自动化测试都有用到reportng来做测试报告的展示,发现了几个不是很方便的地方: 报告没有本地化的选项 主页的测试结果显示的不够清晰 测试详情中的结果是按照名称排列的,想 ...
- [GO]随机数的使用
package main import ( "math/rand" "time" "fmt" ) func main() { //设置种子, ...
- 平方十位数——第八届蓝桥杯JavaB组(国赛)第一题
原创 标题:平方十位数 由0~9这10个数字不重复.不遗漏,可以组成很多10位数字.这其中也有很多恰好是平方数(是某个数的平方). 比如:1026753849,就是其中最小的一个平方数. 请你找出其中 ...
- Dapper 简单封装
using System; using System.Collections.Generic; using System.Text; using Dapper; using System.Data; ...
- winform datagridview某一列设为自动宽度
如果用displayedcells只会使看见的数据自动列宽,滚动条往下发现后面的没有自动列宽,所以要用allcells就不会出现这个问题