题解 | Sudoku

Sudoku

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

暴力枚举

#include <bits/stdc++.h>

using namespace std;

int a[10][10];

bool dfs(int n) {
    if(n >= 81) return true;
    int x = n / 9, y = n % 9;
    if(!a[x][y]) {
        int mask = 0;
        for(int i=0; i<9; i++) {
            if(a[i][y]) mask |= 1 << a[i][y] - 1;
            if(a[x][i]) mask |= 1 << a[x][i] - 1;
        }
        int tx = x / 3, ty = y / 3;
        for(int i=tx*3; i<tx*3+3; i++) {
            for(int j=ty*3; j<ty*3+3; j++) {
                if(a[i][j]) mask |= 1 << a[i][j] - 1;
            }
        }
        for(int i=0; i<9; i++) {
            if(!(mask >> i & 1)) {
                a[x][y] = i + 1;
                if(dfs(n + 1)) return true;
                a[x][y] = 0;
            }
        }
        return false;
    }
    if(dfs(n + 1)) return true;
    return false;
}

int main() {
    for(int i=0; i<9; i++) {
        for(int j=0; j<9; j++) {
            cin >> a[i][j];
        }
    }
    dfs(0);
    for(int i=0; i<9; i++) {
        for(int j=0; j<9; j++) {
            cout << a[i][j] << ' ';
        }
        cout << '\n';
    }
    return 0;
}

全部评论

相关推荐

震撼沃玛一整年:查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-23 18:30
美团优选内容调整,屁股都没离开座椅呢,多多买菜来挖了
熬夜脱发码农:哈,拼多多真挖人是吧
投递美团等公司9个岗位 >
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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