WA0分求调
  • 板块P1784 数独
  • 楼主xyy_xxyy
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/13 15:09
  • 上次更新2024/7/13 16:11:12
查看原帖
WA0分求调
1105472
xyy_xxyy楼主2024/7/13 15:09

code:

#include<bits/stdc++.h>
using namespace std;
const int N = 10;
int a[N][N];
void dfs(int x, int y) {
    if (y == 10) {
        if (x == 9) {
            for (int i = 1; i <= 9; i++) {
                for (int j = 1; j <= 9; j++) {
                    cout << a[i][j] << ' ';
                }
                cout << '\n';
            }
            exit(0);
        } else {
            dfs(x + 1, 1);
            return;
        }
    }
    if (a[x][y] == 0) {
        for (int i = 1; i <= 9; i++) {
            bool flag = 0;
            for (int j = 1; j <= 9; j++) {
                if (a[x][j] == i) {
                    flag = 1;
                }
            }
            if (!flag) {
                for (int j = 1; j <= 9; j++) {
                    if (a[j][y] == i) {
                        flag = 1;
                    }
                }
                if (!flag) {
                    if (x >= 1 && x <= 3) {
                        if (y >= 1 && y <= 3) {
                            for (int j = 1; j <= 3; j++) {
                                for (int k = 1; k <= 3; k++) {
                                    if ((j != x || k != y) && a[j][k] != i) {
                                        flag = 1;
                                    }
                                }
                            }
                            if (!flag) {
                                a[x][y] = i;
                                dfs(x, y + 1);
                            }
                        } else if (y >= 4 && y <= 6) {
                            for (int j = 1; j <= 3; j++) {
                                for (int k = 4; k <= 6; k++) {
                                    if ((j != x || k != y) && a[j][k] != i) {
                                        flag = 1;
                                    }
                                }
                            }
                            if (!flag) {
                                a[x][y] = i;
                                dfs(x, y + 1);
                            }
                        } else {
                            for (int j = 1; j <= 3; j++) {
                                for (int k = 7; k <= 9; k++) {
                                    if ((j != x || k != y) && a[j][k] != i) {
                                        flag = 1;
                                    }
                                }
                            }
                            if (!flag) {
                                a[x][y] = i;
                                dfs(x, y + 1);
                            }
                        }
                    } else if(x >= 4 && x <= 6) {
                        if (y >= 1 && y <= 3) {
                            for (int j = 4; j <= 6; j++) {
                                for (int k = 1; k <= 3; k++) {
                                    if ((j != x || k != y) && a[j][k] != i) {
                                        flag = 1;
                                    }
                                }
                            }
                            if (!flag) {
                                a[x][y] = i;
                                dfs(x, y + 1);
                            }
                        } else if (y >= 4 && y <= 6) {
                            for (int j = 4; j <= 6; j++) {
                                for (int k = 4; k <= 6; k++) {
                                    if ((j != x || k != y) && a[j][k] != i) {
                                        flag = 1;
                                    }
                                }
                            }
                            if (!flag) {
                                a[x][y] = i;
                                dfs(x, y + 1);
                            }
                        } else {
                            for (int j = 4; j <= 6; j++) {
                                for (int k = 7; k <= 9; k++) {
                                    if ((j != x || k != y) && a[j][k] != i) {
                                        flag = 1;
                                    }
                                }
                            }
                            if (!flag) {
                                a[x][y] = i;
                                dfs(x, y + 1);
                            }                            
                        }
                    } else {
                        if (y >= 1 && y <= 3) {
                            for (int j = 7; j <= 9; j++) {
                                for (int k = 1; k <= 3; k++) {
                                    if ((j != x || k != y) && a[j][k] != i) {
                                        flag = 1;
                                    }
                                }
                            }
                            if (!flag) {
                                a[x][y] = i;
                                dfs(x, y + 1);
                            }
                        } else if (y >= 4 && y <= 6) {
                            for (int j = 7; j <= 9; j++) {
                                for (int k = 4; k <= 6; k++) {
                                    if ((j != x || k != y) && a[j][k] != i) {
                                        flag = 1;
                                    }
                                }
                            }
                            if (!flag) {
                                a[x][y] = i;
                                dfs(x, y + 1);
                            }
                        } else {
                            for (int j = 7; j <= 9; j++) {
                                for (int k = 7; k <= 9; k++) {
                                    if ((j != x || k != y) && a[j][k] != i) {
                                        flag = 1;
                                    }
                                }
                            }
                            if (!flag) {
                                a[x][y] = i;
                                dfs(x, y + 1);
                            }
                        }
                    }
                }
            }
        }
    }
}
int main() {
    for (int i = 1; i <= 9; i++) {
        for (int j = 1; j <= 9; j++) {
            cin >> a[i][j];
        }
    }
    dfs(1, 1);
    return 0;
}
2024/7/13 15:09
加载中...