题解 | #Sudoku#

Sudoku

https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1

我也是dfs+回溯+剪枝,各位看看我判定局面的思路即可

// https://www.nowcoder.com/practice/78a1a4ebe8a34c93aac006c44f6bf8a1
#include <cstring>
#include <iostream>
using namespace std;

const int maxn = 5 + 9;

int a[maxn][maxn];

const int sx[] = {0, 1, 1, 1, 4, 4, 4, 7, 7, 7};
const int sy[] = {0, 1, 4, 7, 1, 4, 7, 1, 4, 7};

bool inside(int x, int y) { return 1 <= x && x <= 9 && 1 <= y && y <= 9; }

bool accept() {
    static int cnt[10][10][3];    // row, col, squared
    memset(cnt, 0, sizeof(cnt));  // 第 s 个九宫格
    for (int s = 1; s <= 9; ++s) {
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                int x = sx[s] + i, y = sy[s] + j;
                if (a[x][y] == 0) continue;
                if (++cnt[a[x][y]][x][0] > 1) return false;
                if (++cnt[a[x][y]][y][1] > 1) return false;
                if (++cnt[a[x][y]][s][2] > 1) return false;
            }
        }
    }
    return true;
}

void dfs(int x, int y) {
    if (x == 9 && y > 9) {  // find ans
        for (int i = 1; i <= 9; ++i) {
            for (int j = 1; j <= 9; ++j) {
                cout << a[i][j] << ' ';
            }
            cout << endl;
        }
        exit(0);
    }
    if (!inside(x, y)) {
        dfs(x + 1, 1);
        return;
    }

    if (a[x][y] != 0) {
        dfs(x, y + 1);
        return;
    }

    // a[x][y] == 0, inside(x, y)
    for (int i = 1; i <= 9; ++i) {
        a[x][y] = i;
        if (accept()) dfs(x, y + 1);
        a[x][y] = 0;
    }
}

int main() {
    for (int i = 1; i <= 9; ++i) {
        for (int j = 1; j <= 9; ++j) {
            cin >> a[i][j];
        }
    }
    dfs(1, 1);
}

全部评论

相关推荐

01-30 09:45
燕山大学 Java
喵_coding:这种直接跑就完事了 哪有毕业了才签合同 任何offer和三方都没有的
点赞 评论 收藏
分享
哈哈哈,你是老六:百度去年裁员分评不好,赶紧弄点红包
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10354次浏览 92人参与
# 你的实习产出是真实的还是包装的? #
1836次浏览 42人参与
# 巨人网络春招 #
11320次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7541次浏览 43人参与
# 简历第一个项目做什么 #
31647次浏览 333人参与
# 重来一次,我还会选择这个专业吗 #
433425次浏览 3926人参与
# 米连集团26产品管培生项目 #
5903次浏览 215人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187075次浏览 1122人参与
# 牛客AI文生图 #
21421次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152340次浏览 887人参与
# 研究所笔面经互助 #
118892次浏览 577人参与
# 简历中的项目经历要怎么写? #
310190次浏览 4205人参与
# AI时代,哪些岗位最容易被淘汰 #
63596次浏览 814人参与
# 面试紧张时你会有什么表现? #
30502次浏览 188人参与
# 你今年的平均薪资是多少? #
213065次浏览 1039人参与
# 你怎么看待AI面试 #
180008次浏览 1245人参与
# 高学历就一定能找到好工作吗? #
64323次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76476次浏览 374人参与
# 我的求职精神状态 #
448031次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363355次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160628次浏览 1111人参与
# 校招笔试 #
470789次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务