经典DFS现在看来nice啊!

 package SoduKu;

 import java.io.InputStreamReader;
import java.util.Scanner;
/*
*我用row[k][i]表示第k行是否已经有数i
*col[k][i]表示第k列是否已经有数i
*而sq[k][i]表示第k个九宫格是否有数i(这里k=(x/3)*3+(y/3),可以想想为什么)
*从0,0 依次搜到8,8 DFS依次往下
**/
public class Poj2676{ static int[][] map = new int[9][9];
static int[][] col = new int[9][9];
static int[][] row = new int[9][9];
static int[][] sq = new int[9][9];
static boolean isFind = false;
static void fill(int[][] a){
for(int i = 0; i < 9; ++i){
for(int j = 0; j < 9; ++j)
a[i][j] = 0;
}
}
static void print(){
for(int i = 0; i < 9; ++i) {
for(int j = 0; j < 9; ++j){
System.out.print(map[i][j]+1);
}
System.out.println();
}
} static void dfs(int x, int y){
int u = x*9 + y + 1;
if(x == 9){
isFind = true;
print();
} if(isFind)
return;
if(map[x][y] != -1){
dfs(u/9, u%9);
return;
} for(int i = 0; i < 9 && !isFind; ++i){
int k = (x/3)*3 + y/3;
if(row[x][i] == 0 && col[y][i] == 0 && sq[k][i] == 0){
row[x][i] = col[y][i] = sq[k][i] = 1;
map[x][y] = i; dfs(u/9, u%9); row[x][i] = col[y][i] = sq[k][i] = 0;
map[x][y] = -1;
}
}
}
public static void main(String[] args){
Scanner scanner = new Scanner(new InputStreamReader(System.in)); int k;
int n = scanner.nextInt();
scanner.nextLine();
for(int ni = 1; ni <= n; ++ni){ fill(map);
fill(row);
fill(col);
fill(sq);
isFind = false;
for(int i = 0; i < 9; ++i){
String string = scanner.nextLine();
for(int j = 0; j < 9; ++j) {
k = string.charAt(j) - '0';
map[i][j] = k-1;
if(k != 0){
row[i][k-1] = col[j][k-1] = sq[(i/3)*3 + (j/3)][k-1] = 1;
}
}
}
dfs(0, 0);
}
}
}

Poj2676的更多相关文章

  1. POJ2676,HDU4069解决数独的两种实现:DFS、DLX

    搜索实现:解决数独有两种思考策略,一种是枚举当前格能填的数字的种数,这里有一优化策略就是先搜索能填入种数小的格子:另一种是考虑处理某一行(列.宫)时,对于某一个没用过的数字,若该行(列.宫)只有一个可 ...

  2. poj2676 Sudoku(DFS)

    做了很久还是参考了别人的答案orz,其实也不难啊.我要开始学一下怎么写搜索了... 题目链接:poj2676 Sudoku 题解:暴力搜索,DFS每个空白格子所放数字. #include<cst ...

  3. Sudoku(POJ2676/3074)

    Sudoku is one of the metaphysical techniques. If you understand the essence of it, you will have the ...

  4. 【DLX算法】poj2676 Sudoku

    DLX算法求解精确覆盖问题模板.赛场上可以参见白书. #include<cstdio> #include<cstring> #include<vector> usi ...

  5. POJ2676 (数独问题 + DLX + 状态优化顺序)

    (1)最简单的最是去暴力DFS搜索答案 , 很容易想到 , 每行每列的方式去搜索 , 不过效率是真的不行;但这个还是给出代码 ,毕竟打了也不容易呀! #include<cstdio> #i ...

  6. poj2676 Sudoku

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17953   Accepted: 8688   Special ...

  7. POJ2676 Sudoku(dfs)

    题目链接. 题目大意: 就是数独游戏.横竖,每一个9宫方块,必须有1~9,且不重复. 分析: 直接DFS.一开始在原图上搜,会TLE.把要补全的空格,放入数组,这样就不用遍历整个图寻找要填的空格了. ...

  8. poj2676解题报告

    题意:有一个9*9的格子 分成了9个3*3的小子格,一些位置上的已有一些数字..现在要求你把没有数字的位置填上数,要求这个数没有出现在这个位置所在的行.列以及所在的子格 分析: 那么我们对于所有的未填 ...

  9. POJ2676 Sudoku [数独]

    好题,也非常有用,犯了几个错误 1.在枚举赋值的时候,思维有个错误:当当前的赋值不能填完这个数独,应该是继续下一个循环,而不是return false 终止枚举 2.Generic Programin ...

随机推荐

  1. 使用CSS隐藏HTML元素的4种常用方法

    现在的网页设计越来越动态化,我们经常需要隐藏某些元素,在特定的时候才显示它们.我们通常可以使用4种方法来隐藏和显示元素. 这4种显示和隐藏元素的技术各自有它们自己的优点的缺点,下面来举例说明. 在这篇 ...

  2. python ConfigParser 模块

    ConfigParser的函数方法 读取配置文件 read(filename) 直接读取ini文件内容 sections() 得到所有的section,并以列表的形式返回 options(sectio ...

  3. python3 -pip

    https://docs.python.org/3/installing/ ===== pip is the preferred installer program. Starting with Py ...

  4. Django(4)html模板继承、模板导入、分页实现

    1.获取所有请求信息 导入模块:from django.core.handlers.wsgi import WSGIRequest request.environ:包含所有的请求信息,可以打印看一下, ...

  5. Mosquitto搭建Android推送服务(二)Mosquitto简介及搭建

    文章钢要: 1.了解Mosquitto服务器 2.在Liunx中搭建Mosquitto服务器 3.设置Mosquitto集群 一.Mosquitto简介 一款实现了消息推送协议 MQTT v3.1 的 ...

  6. MySQL--InnoDB索引原理详解

    1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很大帮助,也为了保证文章完整性,最后还是加上了这部分. 先看看几种树形结构: 1 搜索二叉树: ...

  7. Flask 框架入门

    Flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 安装 Flask 依赖两个外部库, We ...

  8. Android使用CountDownTimer倒计时

    1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...

  9. c# 使用泛型类型作为参数

    泛型作为一种经常使用的类型,有时需要在方法之间传递,不了解的话可能会束手无策. 比如我定义一个方法 processList  需要把List<T>  作为参数传入,这时可以这样写 publ ...

  10. tornado高效开发必备之源码详解

    前言:本博文重在tornado源码剖析,相信读者读完此文能够更加深入的了解tornado的运行机制,从而更加高效的使用tornado框架. 本文参考武sir博客地址:http://www.cnblog ...