2 条题解

  • 0
    @ 2025-10-8 16:50:43
    #include <bits/stdc++.h>
    using namespace std;
    int a[10][10], b[10][10];
    bool vrow[10][10], vcol[10][10], vb[10][10], bk;
    
    void dfs(int x, int y) {
        if (bk) return;
        if (x == 10) {
            bk = 1;
            return;
        }
        if (y == 10) {
            dfs(x + 1, 1);
            return;
        }
    
        if (a[x][y] != 0) {
            dfs(x, y + 1);
        } else {
            for (int t = 1; t <= 9; t++) {
                if (!vrow[x][t] && !vcol[y][t] && !vb[b[x][y]][t]) {
                    vrow[x][t] = vcol[y][t] = vb[b[x][y]][t] = 1;
                    a[x][y] = t;
                    dfs(x, y + 1);
                    if (bk) return;
                    vrow[x][t] = vcol[y][t] = vb[b[x][y]][t] = 0;
                    a[x][y] = 0;
                }
            }
        }
    }
    
    int main() {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                b[i][j] = (i - 1) / 3 * 3 + (j + 2) / 3;
            }
        }
    
        memset(vrow, 0, sizeof(vrow));
        memset(vcol, 0, sizeof(vcol));
        memset(vb, 0, sizeof(vb));
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                scanf("%d", &a[i][j]);
                if (a[i][j] != 0) {
                    vrow[i][a[i][j]] = 1;
                    vcol[j][a[i][j]] = 1;
                    vb[b[i][j]][a[i][j]] = 1;
                }
            }
        }
        bk = 0;
        dfs(1, 1);
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= 9; j++) {
                printf("%d ", a[i][j]);
            }
            printf("\n");
        }
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:50:28
      #include<bits/stdc++.h>
      using namespace std;
      int a[10][10],b[10][10];
      bool vrow[10][10],vcol[10][10],vb[10][10],bk;
      void dfs(int x,int y)
      {
          if(bk) return ;
          if(x==10) { bk=1;       return ; }
          if(y==10) { dfs(x+1,1); return ; }
          
          if(a[x][y]!=0) dfs(x,y+1); 
          else
          {
              for(int t=1;t<=9;t++)
              {
                  if( vrow[x][t]==0 && vcol[y][t]==0 && vb[ b[x][y] ][t]==0)
                  {
                      vrow[x][t]=vcol[y][t]=vb[ b[x][y] ][t]=1;
                      a[x][y]=t;
                      dfs(x,y+1);if(bk) return;
                      vrow[x][t]=vcol[y][t]=vb[ b[x][y] ][t]=0;
                      a[x][y]=0;
                  }
              }
          }
      }
      int main()
      {
          for(int i=1;i<=9;i++)for(int j=1;j<=9;j++)b[i][j]=(i-1)/3 * 3+ (j+2)/3;
      
          memset(vrow,0,sizeof(vrow));memset(vcol,0,sizeof(vcol));memset(vb,0,sizeof(vb));
          for(int i=1;i<=9;i++) for(int j=1;j<=9;j++)
          {
              scanf("%d",&a[i][j]);
              if(a[i][j]!=0)
              {
                  vrow[i][a[i][j]]=1;
                  vcol[j][a[i][j]]=1;
                  vb[b[i][j]][a[i][j]]=1;
              }
          }
          bk=0;
          dfs(1,1);
          for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++) printf("%d ",a[i][j]); printf("\n");}
          return 0;
      }
      • 1

      信息

      ID
      460
      时间
      3000ms
      内存
      128MiB
      难度
      6
      标签
      递交数
      114
      已通过
      34
      上传者