社区讨论

RE求调

B4279[蓝桥杯青少年组国赛 2023] 数独填数参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mljkw53o
此快照首次捕获于
2026/02/12 22:53
7 天前
此快照最后确认于
2026/02/15 17:50
4 天前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

char a[11][10];
bool flag;

bool check(int i, int j, int k){
    for(int x=1;x<=9;x++){
        if(a[i][x]==(k+48)&&a[x][j]==(k+48)){
            flag = 0;
            return 0;
        }
    }
    if(i<=3&&j<=3){
        for(int x=1;x<=3;x++)
            for(int y=1;y<=3;y++)
                if(a[x][y]==(k+48)){
                    flag = 0;
                    return 0;
                }
    }
    else if(i<=3&&j>=4&&j<=6){
        for(int x=1;x<=3;x++)
            for(int y=4;y<=6;y++)
                if(a[x][y]==(k+48)){
                    flag = 0;
                    return 0;
                }
    }
    else if(i<=3&&j>=7&&j<=9){
        for(int x=1;x<=3;x++)
            for(int y=7;y<=9;y++)
                if(a[x][y]==(k+48)){
                    flag = 0;
                    return 0;
                }
    }
    else if(i>=4&&i<=6&&j<=3){
        for(int x=4;x<=6;x++)
            for(int y=1;y<=3;y++)
                if(a[x][y]==(k+48)){
                    flag = 0;
                    return 0;
                }
    }
    else if(i>=4&&i<=6&&j>=4&&j<=6){
        for(int x=4;x<=6;x++)
            for(int y=4;y<=6;y++)
                if(a[x][y]==(k+48)){
                    flag = 0;
                    return 0;
                }
    }
    else if(i>=4&&i<=6&&j>=7&&j<=9){
        for(int x=4;x<=6;x++)
            for(int y=7;y<=9;y++)
                if(a[x][y]==(k+48)){
                    flag = 0;
                    return 0;
                }
    }
    else if(i>=7&&i<=9&&j<=3){
        for(int x=7;x<=9;x++)
            for(int y=1;y<=3;y++)
                if(a[x][y]==(k+48)){
                    flag = 0;
                    return 0;
                }
    }
    else if(i>=7&&i<=9&&j>=4&&j<=6){
        for(int x=7;x<=9;x++)
            for(int y=4;y<=6;y++)
                if(a[x][y]==(k+48)){
                    flag = 0;
                    return 0;
                }
    }
    else if(i>=7&&i<=9&&j>=7&&j<=9){
        for(int x=7;x<=9;x++)
            for(int y=7;y<=9;y++)
                if(a[x][y]==(k+48)){
                    flag = 0;
                    return 0;
                }
    }
    else{
        flag = 1;
        return 1;
    }
}

void DFS(int i, int j){
    if(i==10&&j==1){
        for(int k=1;k<=9;k++){
            for(int l=1;l<=9;l++)
                cout << a[k][l];
            cout << endl;
        }
        return;
    }
    if(a[i][j]!='0')
        if(j==9)
            DFS(i+1, 1);
        else
            DFS(i, j+1);
    else{
        for(int k=1;k<=9;k++){
            if(check(i, j, k)&&j==9)
                DFS(i+1, 1);
            else if(flag)
                DFS(i, j+1);
        }
    }
}

int main(){
    char b;
    for(int i=1;i<=9;i++)
        for(int j=1;i<=9;j++){
            cin >> b;
            if(b!='.')
                a[i][j] = b;
            else
                a[i][j] = '0';
        }
    DFS(1, 1);
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...