题目链接:HDU-5547 http://acm.hdu.edu.cn/showproblem.php?pid=5547


正所谓:骗分过样例,暴力出奇迹。

解题思想(暴力出奇迹(DFS+回溯)):

1. 依次在空格里面填上“1~9”,并检查这个数字是否合法(其所在的行、列,以及3X3的子区域里不存在重复的数字)。如果合法,则前进到下一个格子。

2. 如果在某个格子里,从“1”到“9”都不合法,这说明前面某个格子填错了。这时就回退到上一格,继续试。例如,如果上一格已填的数字是3,就继续试4,5,6,… 是否合法。如果找到一个合法的数字,则又前进到下一格。如果找不到,说明前面还有格子也填错了,则继续回退到更前面一格,… 如此反复。

4. 如果这个数独是有解的,我们总会遇到“蒙对了”的情况。

HDU 的这题实在是太坑了,题目描述里有一句:Each test case starts with an empty line followed by 4 lines,没仔细看输入样例里也没有空行 。66666666666666666。告辞,我错了。

#include <iostream>
#include <string>
using namespace std; int M[][];
bool flag = false; int check(int row, int column, int x) {
for (int i = ; i < ; i++) {
if (M[i][column] == x || M[row][i] == x)
return ;
}
int r = row / * , c = column / * ;
for (int i = r; i < r + ; i++) {
for (int j = c; j < c + ; j++) {
if (M[i][j] == x) return ;
}
}
return ;
} void DFS(int row, int column) {
if (row == ) {
flag = true;
return;
} if (M[row][column] == -) {
int i;
for (i = ; i <= ; i++) {
if (check(row, column, i)) {
M[row][column] = i;
DFS(row + (column + ) / , (column + ) % );
if (flag) return;
}
}
if (i == ) {
M[row][column] = -;
return;
}
}
DFS(row + (column + ) / , (column + ) % );
}
int main() {
int i = ,n;
cin >> n; string s;
cin.ignore();
while (n--) {
flag = false;
for (int i = ; i < ; i++) {
getline(cin, s);
if (s.empty()) {
i--;
continue;
}
for (int j = ; j < ; j++) {
M[i][j] = s[j]-'';
}
}
DFS(, );
cout << "Case #" << i++ << ":" << endl;
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++) {
cout << M[i][j];
}
cout << endl;
}
}
return ;
}

HDU - 5547 数独(回溯法)的更多相关文章

  1. 回溯法、数独与N阶可达问题

    回溯法是剪了枝的穷举,这是字面上的说法,不太好理解,不如讲解实例来的酸爽,于是引出了N阶可达问题: 有N个国家,每个国家有若干城市,小明要从中国(任意一个城市)出发,遍历所有国家(假设这个遍历顺序已经 ...

  2. P1074 靶形数独 dfs回溯法

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

  3. Leetcode之回溯法专题-37. 解数独(Sudoku Solver)

    Leetcode之回溯法专题-37. 解数独(Sudoku Solver) 编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次.数字 1 ...

  4. HDU 2553 n皇后问题(回溯法)

     DFS Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   Description ...

  5. HDU 1016 Prime Ring Problem (回溯法)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. python常用算法(7)——动态规划,回溯法

    引言:从斐波那契数列看动态规划 斐波那契数列:Fn = Fn-1 + Fn-2    ( n = 1,2     fib(1) = fib(2) = 1) 练习:使用递归和非递归的方法来求解斐波那契数 ...

  7. 【LeetCode】回溯法 backtracking(共39题)

    [10]Regular Expression Matching [17]Letter Combinations of a Phone Number [22]Generate Parentheses ( ...

  8. 回溯法解决N皇后问题(以四皇后为例)

    以4皇后为例,其他的N皇后问题以此类推.所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子.在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平.竖直.以及45度 ...

  9. leetcode_401_Binary Watch_回溯法_java实现

    题目: A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bot ...

随机推荐

  1. sql server web管理软件

    Sql server目前虽然没有mysql用户量大,但是微软的产品在易用性方面还是很不错的,有些政务类的项目还是用 Sql server数据库的, 目前有一款Sql server的web管理工具Tre ...

  2. jenkins在Linux 下安装部署

      这里介绍两种方法,一种方法将最新版jenkins加入到yum源,另外一种是下载指定版本的rpm包 系统centos6 自带jdk1.7 一 安装jenkins wget -O :下载并以不同的文件 ...

  3. Struts2(二)— Result结果配置、Servlet的API的访问、模型驱动、属性驱动

    一.Result结果配置 1.全局和局部结果 ​ 平常我们设置跳转页面,是在action标签里面加上 result标签来控制,这种设置的页面跳转,称之为局部结果页面但是我们有时候在很多个action里 ...

  4. CentOS-Linux系统下安装JDK

    一般情况下,Linux系统都有自带的JDK,但不符合开发要求,所以需要卸载,重新安装JDK 步骤1:查看现有安装的JDK版本 命令: rpm -qa | grep -i java 步骤2:卸载已有软件 ...

  5. sublime 在Mac终端下设置快捷打开方式

    vi ~/.zshrc alias subl='open -a "Sublime Text"' source ~/.zshrc 打开 ~/.zshrc,然后写入第二行,然后执行第三 ...

  6. jq中的isArray方法分析,如何判断对象是否是数组

    <!DOCTYPE html> <html> <head> <title>jq中的isArray方法分析</title> <meta ...

  7. 转:drupal sql查询count

    Count queries Count queries Any query may have a corresponding "count query". The count qu ...

  8. 006Spring面向切面

    01.基本术语---->POM中配置spring-aspects 1.通知(Advice)---->要做的事 前置通知(@Before) 后置通知(@After) 返回通知(@AfterR ...

  9. intelliJ IDEA 怎么添加本地的idea web项目

    概述:这篇文章主要讲述idea开发工具怎么添加本地的idea web项目. 一:首先介绍一下idea web项目的目录结构: 上图详细简单的说了一下idea web项目的文件情况. 二:说明一下部署本 ...

  10. 【分享】BS大神的C++ 11 keynotes

    看到infoQ上面有BS大神的keynotes讲C++ 11的,有点长,但是值得一看.   http://www.infoq.com/presentations/Cplusplus-11-Bjarne ...