2 条题解

  • 0
    @ 2025-1-24 20:22:53

    分析宫可知 模拟

    switch(a){
    	case 0 :switch(b) {case 0 :   return 1;	
    	                   case 1 :   return 2;
    	                   case 2 :   return 3;
    					  
                   }
    	case 1 :switch(b) {case 0 :   return 4;	
    	                   case 1 :   return 5;
    	                   case 2 :   return 6;
    			
    }
    	case 2 :switch(b)  {case 0 :   return 7;	
    	                   case 1 :   return 8;
    	                   case 2 :   return 9;
    					   
    

    分析可知 每3行宫+3 每3列宫+1$$

    gong=((y1)/3)3+(x1)/3 gong=((y-1)/3)*3+(x-1)/3
    • 0
      @ 2022-11-15 20:43:49
      #include<bits/stdc++.h>
      using namespace std;
      bool area[10][10],line[10][10],lie1[10][10];//判断是否重复
      char a1[10][10];
      int a[10][10],f[10][10],sum1;
      void init()
      {
      int l=0,lie=0;
      for(int i=1;i<=9;i++)
      {
      l++;
      lie=0;
      for(int j=1;j<=9;j++)
      {
      cin>>a1[i][j];
      lie++;
      a[i][j]=a1[i][j]-'0';
      if(a[i][j]!=0)
      {
      f[i][j]=a[i][j];
      line[l][a[i][j]]=true;
      lie1[lie][a[i][j]]=true;
      if(l<=3)
      {
      if(lie<=3) area[1][a[i][j]]=true;
      if(lie>3&&lie<=6) area[2][a[i][j]]=true;
      if(lie>6&&lie<=9) area[3][a[i][j]]=true;
      }
      if(l>3&&l<=6)
      {
      if(lie<=3) area[4][a[i][j]]=true;
      if(lie>3&&lie<=6) area[5][a[i][j]]=true;
      if(lie>6&&lie<=9) area[6][a[i][j]]=true;
      }
      if(l>6&&l<=9)
      {
      if(lie<=3) area[7][a[i][j]]=true;
      if(lie>3&&lie<=6) area[8][a[i][j]]=true;
      if(lie>6&&lie<=9) area[9][a[i][j]]=true;
      }
      }
      }
      }
      }
      void printf()
      {
      sum1++;
      for(int i=1;i<=9;i++)
      {
      for(int j=1;j<=9;j++)
      {
      cout<<f[i][j];
      }
      cout<<endl;
      }
      }
      void search(int x,int y)
      {
      int area1;
      if(a[x][y]!=0)
      {
      if(x==9&&y==9) printf();
      if(y!=9)
      search(x,y+1);
      if(y==9)
      search(x+1,1);
      }
      if(a[x][y]==0)
      {
      if(x<=3)
      {
      if(y<=3) area1=1;
      if(y>3&&y<=6) area1=2;
      if(y>6&&y<=9) area1=3;
      }
      if(x>3&&x<=6)
      {
      if(y<=3) area1=4;
      if(y>3&&y<=6) area1=5;
      if(y>6&&y<=9) area1=6;
      }
      if(x>6&&x<=9)
      {
      if(y<=3) area1=7;
      if(y>3&&y<=6) area1=8;
      if(y>6&&y<=9) area1=9;
      }
      for(int i=1;i<=9;i++)
      {
      if(!line[x][i]&&!lie1[y][i]&&!area[area1][i])
      {
      f[x][y]=i;
      line[x][i]=true;
      lie1[y][i]=true;
      area[area1][i]=true;
      if(x==9&&y==9)
      printf();
      if(y==9) search(x+1,1);
      else search(x,y+1);
      f[x][y]=0;
      line[x][i]=false;
      lie1[y][i]=false;
      area[area1][i]=false;
      }
      }
      }
      }
      int main()
      {
      init();
      search(1,1);
      cout<<sum1;
      return 0;
      }
      

      珍爱生命,禁止抄袭

      • 1

      信息

      ID
      452
      时间
      1000ms
      内存
      256MiB
      难度
      6
      标签
      递交数
      31
      已通过
      11
      上传者