做了很久还是参考了别人的答案orz,其实也不难啊。我要开始学一下怎么写搜索了。。。

题目链接:poj2676 Sudoku

题解:暴力搜索,DFS每个空白格子所放数字。

 #include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
bool row_f[][];//row_f[i][j]=1表示第i行已经放了数字j
bool col_f[][];
bool block_f[][];
int g[][];
struct blank{
int i, j;
blank(int i, int j):i(i),j(j) {}
};
vector<blank> bk;
int get_blockid(int i, int j){
i /= ;
j /= ;
return i * + j;
}
bool ok(int i, int j, int x){
return !row_f[i][x] && !col_f[j][x] && !block_f[get_blockid(i, j)][x];
}
void setnum(int i, int j, int x, int f){
row_f[i][x] = f;
col_f[j][x] = f;
block_f[get_blockid(i, j)][x] = f;
}
bool dfs(int n){//处理前n个空白格
if(n < ) return true;
int r = bk[n].i;
int c = bk[n].j;
for(int x = ; x <= ; ++x){
if(ok(r, c, x)){
setnum(r, c, x, );
g[r][c] = x;
if(dfs(n - )) return true;
setnum(r , c, x, );
}
}
return false;
}
int main(){
int t, i, j;
char c;
scanf("%d", &t);
while(t--){
bk.clear();
memset(row_f, , sizeof(row_f));
memset(col_f, , sizeof(col_f));
memset(block_f, , sizeof(block_f));
for(i = ; i < ; ++i){
for(j = ;j < ; ++j){
cin >> c;
g[i][j] = c - '';
if(!g[i][j])
bk.push_back(blank(i, j));
else
setnum(i, j, g[i][j], );
}
}
if(dfs(bk.size()-)){
for(i = ; i < ; ++i){
for(j = ; j < ; ++j)
printf("%c", g[i][j] + '');
printf("\n");
}
}
}
return ;
}

最新文章

  1. js整理5
  2. IE6 一些兼容性问题及处理方法
  3. javaWEB中的HttpServlet(企业开发使用)
  4. (07)odoo扩展API
  5. js获取字符串最后一个字符代码
  6. 洛谷 P2279 03湖南 消防局的设立
  7. Cmake find_package()相关
  8. VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法]
  9. winfrom中将panel另存为图片
  10. oracle数据库知识点
  11. html模板输头部出现&quot;&amp;#65279&quot;
  12. LeetCode(100):相同的树
  13. sql 删除默认索引,对象 依赖于 列,由于一个或多个对象访问此列
  14. Python基础【day01】:Hello World程序(二)
  15. 雷林鹏分享:jQuery EasyUI 表单 - 表单验证
  16. Python之路PythonNet,第一篇,网络1
  17. 网络爬虫2:使用crawler4j爬取网络内容
  18. Python(三)之Python的表达式和语句概述
  19. Ubuntu 安装IntelliJ IDEA
  20. linux源码编译安装php出现 cannot find -lltdl

热门文章

  1. 观摩制作小游戏(js应用)
  2. C# WPF &ndash; 利用&ldquo;Attached Property&rdquo; 把 RoutedEvent 接上 ICommand
  3. java传递和返回对象
  4. [Java解惑]应用
  5. Simulating a Fetch robot in Gazebo
  6. 自定义CSS博客(转)
  7. javascript练习----复选框全选,全不选,反选
  8. iOS - Swift Closure 闭包
  9. 强大!基于拖放布局的 Twitter Bootstrap 网站生成器
  10. 一些比较好的shellscript脚本