标准数独游戏-深搜解法

题目:

蒜头君今天突然开始还念童年了,想回忆回忆童年。他记得自己小时候,有一个很火的游戏叫做数独。便开始来了一局紧张而又刺激的高阶数独。蒜头君做完发现没有正解,不知道对不对? 不知道聪明的你能否给出一个标准答案?

标准数独是由一个给与了提示数字的 9 \times 99×9 网格组成,我们只需将其空格填上数字,使得每一行,每一列以及每一个 3 \times 33×3 宫都没有重复的数字出现。

输出这个数独得正解,输出格式如下:

 
   
   
   
   
1
* 2 6 * * * * * *
2
* * * 5 * 2 * * 4
3
* * * 1 * * * * 7
4
* 3 * * 2 * 1 8 *
5
* * * 3 * 9 * * *
6
* 5 4 * 1 * * 7 *
7
5 * * * * 1 * * *
8
6 * * 9 * 7 * * *
9
* * * * * * 7 5 *

把上面的 * 替换成 1 - 919 就可以了

提醒:两个数字之间要有一个空格,其他地方不要输出多余的符号。

对于这道数独题,一开始我是懵的,后来看了很多资料才略懂,还去完了一下数独游戏,哈哈,挺难的。简单来说,就是满足三点:1、每一行不能有重复数字;2、每一列不能有重复数字;3、每一个小方格(小九宫格)不能有重复数字

----------------------------------------------------------------------------------------------------------------------

 解题思路:DFS深度填数检测+回溯法

     1,先把有数字的地方设置标记位为true

     2,循环遍历数组中没有标记位true的地方,也就是需要填数的地方

           如果当前为0,即a[i][j]==0,判断当前所在的九宫格,然后从数字1-9依次检测是否在行、列、宫中唯一

                                  满足唯一的话,则吧数字赋值给a[i][j]=l+1;然后继续深度遍历为true的话就返回true,否则回溯a[i][j]==0等

                                  不满足满足唯一则判断下一个数字,直到1-9都判断不满足则返回false,会回溯到上一层

       如果当前没有0,说明都已经填满且符合唯一条件,则返回true;结束



代码如下:

package lanqiao;
/*
 * 深搜-标准数独游戏的求解
 */
import java.util.Scanner;
public class Shudu1 {
	public static int N=9;
	public static int[][] a=new int[N][N];
	public static boolean[][] rows=new boolean[N][N];//把行数字存在一个矩阵中做标记,rows[i][val],i代表行号,val则代表这个地方所填的数字
	public static boolean[][] cols=new boolean[N][N];//同理,cols[j][val],j代表列号,val代表这个地方所填的数字
	public static boolean[][] blocks=new boolean[N][N];//blocks[k][val],k代表块号0-8,val代表这个方块里的数字
	public static void main(String[] args) {
	Scanner cin=new Scanner(System.in);
	for(int i=0;i

输入:

5 0 9 0 0 4 0 1 0
6 0 0 8 0 2 0 0 5
0 4 0 3 0 0 6 0 7
0 0 4 0 0 7 9 0 0
0 6 0 9 2 0 0 3 0
9 0 0 0 4 0 0 7 0
0 5 0 0 1 0 0 0 3
0 9 0 0 8 5 0 2 0
0 0 1 2 0 0 4 0 0

输出:

5 3 9 6 7 4 2 1 8
6 1 7 8 9 2 3 4 5
2 4 8 3 5 1 6 9 7
1 2 4 5 3 7 9 8 6
7 6 5 9 2 8 1 3 4
9 8 3 1 4 6 5 7 2
4 5 2 7 1 9 8 6 3
3 9 6 4 8 5 7 2 1
8 7 1 2 6 3 4 5 9

标准数独游戏-深搜解法_第1张图片

推荐博客: http://blog.csdn.net/hll174/article/details/51090461

你可能感兴趣的:(算法,DFS,深搜,数独游戏)