【算法题】解数独-用深度优先搜索(DFS)算法解数独

描述

输入一个数独棋盘,用0代表待填的空格

输出数独的一个解

示例

输入:

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

输出:

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

思路

由于一个数独题目可能有多个解,后填的数字会影响先填的数字的正确性,因此简单的遍历并不能解决问题,需要深度优先搜索来找到一个解。

对每一个空格按1-9顺序检查是否是在目前已知棋局下可能的解,假设这个空格正确的情况下往后递归遍历空格。

如果遇到有填不了的空格,那么说明前面填的空格有错误,回溯。

如果填完了整个棋盘,那么就说明找到了一个解,输出即可。

代码

public class HJ44_Sudoku {
    //使用深度优先搜索DFS
    private static Scanner scanner=new Scanner(System.in);

    p
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值