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< ...
随机推荐
- 496. Next Greater Element I 另一个数组中对应的更大元素
[抄题]: You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subse ...
- 414. Third Maximum Number数组中第三大的数字
[抄题]: Given a non-empty array of integers, return the third maximum number in this array. If it does ...
- ESP8266文档阅读2A-SDK-Espressif IoT SDK 使用手册v1.0.1.pdf
2A-SDK-Espressif IoT SDK 使用手册v1.0.1.pdf 1.前言 本⽂文主要介绍基于ESP8266物联⺴⽹网模块的SDK相关使⽤用⽅方法,包括开发⼯工具使⽤用以及SDK软件包架 ...
- poj 1988 Cube Stacking (并查集)
题意:有N(N<=30,000)堆方块,开始每堆都是一个方块.方块编号1 – N. 有两种操作: M x y : 表示把方块x所在的堆,拿起来叠放到y所在的堆上. C x : 问方块x下面有多少 ...
- iOS CocoaPods安装与使用 好东西保存
http://www.cnblogs.com/daguo/p/4097263.html http://www.cnblogs.com/pican/p/3939941.html?utm_source=t ...
- LightOJ 1282 Leading and Trailing (数学)
题意:求 n^k 的前三位和后三位. 析:后三位,很简单就是快速幂,然后取模1000,注意要补0不全的话,对于前三位,先取10的对数,然后整数部分就是10000....,不用要,只要小数部分就好,然后 ...
- HTTP Debugger Pro安装教程
相关链接:HTTP Debugger Pro使用教程 安装步骤: 1.解压压缩包 2.双击运行安装文件 3.根据向导提示点击Next 4.选择接受协议,点击Next 5.选择高级模 ...
- 编写高质量代码改善C#程序的157个建议——建议12: 重写Equals时也要重写GetHashCode
建议12: 重写Equals时也要重写GetHashCode 除非考虑到自定义类型会被用作基于散列的集合的键值:否则,不建议重写Equals方法,因为这会带来一系列的问题. 如果编译上一个建议中的Pe ...
- 【Java】对Map按key和value分别排序
一.什么是Map? 在讲解Map排序之前,我们先来稍微了解下map. map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. ...
- .net 序列化 与反序列化 Serializable
序列化:序列化指的是 将对象 通过流的方式 保存为一个文件. 反序列化则是将该文件还原成 对象的过程. 序列化的作用:序列化可以跨语言跨平台 传输数据,将某一对象序列化成通用的文件格式在进行传输. 比 ...