社区讨论

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 条回复,欢迎继续交流。

正在加载回复...