社区讨论
60分 TLE*2
P1784数独参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo7u9rr8
- 此快照首次捕获于
- 2023/10/27 07:52 2 年前
- 此快照最后确认于
- 2023/10/27 07:52 2 年前
#1 #2 #3 AC
#4 #5 TLE
这是参考了一篇大佬题解的代码
CPP#include <bits/stdc++.h>
using namespace std;
int a[10][10], t, w, v;
void print(){
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++)
cout << a[i][j] << " ";
cout << endl;
}
}
void dfs(int i, int j){
if (i == 10 && j == 1) {
print();
exit(0);
}
if (a[i][j] == 0) {
for (int h = 1; h <= 9; h++) {
t = 0;
for (int m = 1; m <= 9; m++) {
if (a[i][m] == h) {
t = 1;
break;
}
}
if (t == 0) {
for (int m = 1; m <= 9; m++) {
if (a[m][j] == h) {
t = 1;
break;
}
}
if (t == 0) {
w = i;
v = j;
while (w % 3 != 1) w--;
while (v % 3 != 1) v--;
for (int y = w; y <= w + 2; y++) {
for (int z = v; z <= v + 2; z++) {
if (a[y][z] == h) {
t = 1;
break;
}
}
}
if (t == 0) {
a[i][j] = h;
if (j + 1 > 9) {
dfs(i + 1, 1);
a[i][j] = 0;
} else {
dfs(i, j + 1);
a[i][j] = 0;
}
}
}
}
}
} else {
if (j + 1 > 9) dfs(i + 1, 1);
else dfs(i, j + 1);
}
}
int main() {
for (int i = 1; i <= 9; i++)
for (int j = 1; j <= 9; j++)
scanf("%d",&a[i][j]);
dfs(1, 1);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...