60分 TLE*2
  • 板块P1784 数独
  • 楼主Lovely_Elaina
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/10/11 19:38
  • 上次更新2023/10/27 07:52:09
查看原帖
60分 TLE*2
781159
Lovely_Elaina楼主2022/10/11 19:38

#1 #2 #3 AC

#4 #5 TLE

这是参考了一篇大佬题解的代码

#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;
}
2022/10/11 19:38
加载中...