题解 | #Sudoku#

Sudoku

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

#include <iostream>
#include <vector>
using namespace std;
const int n = 9;
vector<vector<int>> mp(9, vector<int>(9)) ;
bool isEnd = false;
bool check(int row, int col, int val) {
    for (int i = 0; i < n; i++) {
        if (val == mp[i][col]) {
            return false;
        }
    }
    for (int i = 0; i < n; i++) {
        if (val == mp[row][i]) {
            return false;
        }
    }
    int limit_row = row / 3 * 3 + 3;
    int limit_col = col / 3 * 3 + 3;
    for (int i = limit_row - 3; i < limit_row; i++) {
        for (int j = limit_col - 3; j < limit_col; j++) {
            if (val == mp[i][j]) {
                return false;
            }
        }
    }
    return true;
}
void dfs(int row, int col) {
    if (col == 9) {
        row++;
        col = 0;
    }
    if (row == 9) {
        isEnd = true;
        return ;
    }
    if (mp[row][col] == 0) {
        for (int i = 1; i <= n; i++) {
            if (check(row, col, i)) {
                mp[row][col] = i;
                dfs(row, col + 1);
                if (isEnd == true) {
                    return ;
                }
                mp[row][col] = 0;
            }
        }
    } else {
        dfs(row, col + 1);
    }
}
int main() {
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            cin >> mp[i][j];
        }
    }
    dfs(0, 0);
    for (auto& i : mp) {
        for (auto& j : i) {
            cout << j << ' ';
        }
        cout << endl;
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

10-29 19:45
吉林大学 Java
从零开始数:自我评价没有必要写,但是看起来你应该是学了csdiy的一些课程,可以在专业技能里面写上自己比较熟悉操作系统和计网,但如果你是找Java的话,把第一个项目换了吧,现在看起来有点四不像。 无论是黑马点评或者说做个轮子项目,刷题和八股也搞起来吧,而且也没必要等到寒假,最近就可以开始找,找到就偷偷实习呗,别被逮到就行了。
点赞 评论 收藏
分享
昨天 22:21
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务