经典sudoku问题

按部就班就好

一定要注意细节

大于1还是大于等于1

r c越界判断

judge时0的特判

blabla居然磨了2个小时

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

  1. /*H E A D*/
  2. int sudo[66][66];
  3. char str[666];
  4. int usedr[66][11];
  5. int usedc[66][11];
  6. int rsum[66],csum[66];
  7. typedef pair<int,int> P;
  8. P pos(int i,int j){
  9. if(i>=1&&i<=3){
  10. if(j>=1&&j<=3) return P(1,1);
  11. if(j>=4&&j<=6) return P(1,4);
  12. if(j>=7&&j<=9) return P(1,7);
  13. }
  14. if(i>=4&&i<=6){
  15. if(j>=1&&j<=3) return P(4,1);
  16. if(j>=4&&j<=6) return P(4,4);
  17. if(j>=7&&j<=9) return P(4,7);
  18. }
  19. if(i>=7&&i<=9){
  20. if(j>=1&&j<=3) return P(7,1);
  21. if(j>=4&&j<=6) return P(7,4);
  22. if(j>=7&&j<=9) return P(7,7);
  23. }
  24. }
  25. int check2;
  26. bool cal2(int nowr,int nowc,int num){
  27. int sum=0;
  28. if(rsum[nowr]+num>45||csum[nowc]+num>45)return 0;
  29. P p=pos(nowr,nowc);
  30. int sr=p.first,sc=p.second;
  31. check2=0;
  32. rep(i,1,9) if(sudo[nowr][i]==num){
  33. ++check2;
  34. if(check2>=1)return 0;
  35. }
  36. check2=0;
  37. rep(i,1,9) if(sudo[i][nowc]==num){
  38. ++check2;
  39. if(check2>=1)return 0;
  40. }
  41. check2=0;
  42. rep(i,sr,sr+2){
  43. rep(j,sc,sc+2){
  44. if(sudo[i][j]==num){
  45. ++check2;
  46. if(check2>=1)return 0;
  47. }
  48. }
  49. }
  50. return 1;
  51. }
  52. int cnt=0;
  53. bool dfs(int r,int c){
  54. if(r==9&&c==10)return 1;
  55. else if(c==10){
  56. c=1;
  57. r++;
  58. if(r==10)return 1;
  59. }
  60. while(sudo[r][c]){
  61. c++;
  62. if(c==10){
  63. c=1;
  64. r++;
  65. if(r==10)return 1;
  66. }
  67. }
  68. rep(i,1,9){
  69. if(usedr[r][i]||usedc[c][i]||cal2(r,c,i)==0){
  70. continue;
  71. }
  72. if(!cal2(r,c,i))continue;
  73. usedr[r][i]++;usedc[c][i]++;
  74. rsum[r]+=i;csum[c]+=i;
  75. sudo[r][c]=i;
  76. if(dfs(r,c+1))return 1;
  77. else{
  78. usedr[r][i]--;usedc[c][i]--;
  79. rsum[r]-=i;csum[c]-=i;
  80. sudo[r][c]=0;
  81. }
  82. }
  83. return 0;
  84. }
  85. int main(){
  86. int T=read();
  87. while(T--){
  88. memset(usedr,0,sizeof usedr);
  89. memset(usedc,0,sizeof usedc);
  90. memset(rsum,0,sizeof rsum);
  91. memset(csum,0,sizeof csum);
  92. rep(i,1,9){
  93. s1(str);
  94. rep(j,1,9) sudo[i][j]=str[j]-'0';
  95. }
  96. bool flag=0;
  97. rep(i,1,9){
  98. rep(j,1,9){
  99. if(!sudo[i][j])continue;
  100. if(++usedr[i][sudo[i][j]]>1){
  101. flag=1;
  102. }
  103. if(++usedc[j][sudo[i][j]]>1){
  104. flag=1;
  105. }
  106. rsum[i]+=sudo[i][j];
  107. csum[j]+=sudo[i][j];
  108. }
  109. }
  110. dfs(1,1);
  111. rep(i,1,9){
  112. rep(j,1,9){
  113. print(sudo[i][j]);
  114. }
  115. enter;
  116. }
  117. }
  118. return 0;
  119. }

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. 关于recv的返回值

    通常recv有几种返回值 1.==0 表示收到FIN包, 因为FIN包,是状态为标记为FIN的空包,没有携带数据,所以recv的长度为0 2.>0 表示收到了数据, 但是有没有收完,是不知道的 ...

  2. Auto Control 001 自动控制的一般概念

    自动控制的基本概念 一 . 自动控制系统的组成 自动控制装置:自动控制装置的组成当中涉及到了这样这样一些东西: 第1,需要有被控对象,那么这些被控对象需要有谁来控制呢?一定要有控制器,这些控制器,我们 ...

  3. 显著水平alpha

    http://blog.minitab.com/blog/adventures-in-statistics-2/understanding-hypothesis-tests:-significance ...

  4. Media Queries 媒体类型

    引用方法:1.<link rel="stylesheet" type="text/css" href="style.css" medi ...

  5. ElasticSearch 笔记(二)

    记录一些核心概念 1) Near Realtime (NRT): 近实时,包括 2 个方面,① 数据从写入 Elasticsearch 到可被搜索.分析的延迟 ( 大约 1 秒 ); ② 从 es 中 ...

  6. RabbitMQ 在 C# 中简单应用

    RabbitMQ是什么及如何安装就不再赘述,百度一下就知道了,只是在配置方面要多加注意. 话不多说,先直接上一个简示例代码 发送端: ConnectionFactory factory = new C ...

  7. Abp使用不同仓储连接多个数据库

    有群友说官方例子中有,无奈英文和网速太差...自己琢磨吧. 最近开发的项目中,需要从外部系统中读取一些信息,计算之后存入本地的数据库中,外部系统直接提供数据库给我..所以本地需要用到多数据库连接. 项 ...

  8. I-team 博客全文检索 Elasticsearch 实战

    一直觉得博客缺点东西,最近还是发现了,当博客慢慢多起来的时候想要找一篇之前写的博客很是麻烦,于是作为后端开发的楼主觉得自己动手丰衣足食,也就有了这次博客全文检索功能Elasticsearch实战,这里 ...

  9. Javascript中对数组处理的函数汇总

    数组类型是JS中非常常见的类型,而且JS里的数组与其他多数语言中的数组有所不同,它的数组里每一项可以存放任何一种类型的数据,也就是说数组的第一项放的是字符串,第二项可以放数字或对象都没问题.而且JS中 ...

  10. "window.location.href"、"location.href"是本页面跳转

    "window.location.href"."location.href"是本页面跳转 "parent.location.href"是上一 ...