前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >穷举vs暴搜vs深搜vs回溯vs剪枝系列一>解数独

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>解数独

作者头像
用户11305962
发布2025-02-03 08:22:02
发布2025-02-03 08:22:02
3400
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

题目:


解析:

部分决策树: 


代码设计&剪枝&回溯: 


代码: 

代码语言:javascript
代码运行次数:0
复制
class Solution {
    private boolean[][] row, col;
    private boolean[][][] gird; 

    public void solveSudoku(char[][] board) {
        //下标->数字;0->1, 1->2
        row = new boolean[9][10];
        col = new boolean[9][10];
        gird = new boolean[3][3][10];

        //初始化上面的标记数组
        for(int i = 0; i < 9; i++)
            for(int j = 0; j < 9; j++){
                int num = board[i][j]-'0';
                if(board[i][j] != '.'){
                    row[i][num] = col[j][num] = gird[i/3][j/3][num] = true;
                }
            }

        dfs(board);
    }

    private boolean dfs(char[][] board){
        for(int i = 0; i < 9; i++){
            for(int j = 0; j < 9; j++){
                if(board[i][j] == '.'){
                    for(int num = 1; num <= 9; num++){
                        //剪枝写法
                        if(!row[i][num] && !col[j][num] && !gird[i/3][j/3][num]){
                            board[i][j] = (char)('0' + num);
                            row[i][num] = col[j][num] = gird[i/3][j/3][num] = true;

                            //填数字往下遍历时候可能会出现 “某一行无数可以填”
                            if(dfs(board) == true) return true;

                            //回溯
                            board[i][j] = '.';
                            row[i][num] = col[j][num] = gird[i/3][j/3][num] = false;
                        }
                    }
                    //一整行都没有返回时(已经试过9个数),也是出现“某一行无数可以填”
                    return false;
                }
            }
        }

        //上面没有返回代表,前面的dfs已经全部填完
        return true;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档