数独

#include<stdio.h> int map[9][9]; int vistx[10][10]; int visty[10][10]; int vistkuai[10][10]; int flag=0; int cass; /*int safe(int x,int y,int xx) {  for(int i=0;i<9;i++)  {   if(map[x][i]==xx||map[i][y]==xx)    return 0;

 }  for(int i=0;i<3;i++)  {   for(int j=0;j<3;j++)   {    if(map[(x/3)*3+i][(y/3)*3+j]==xx)     return 0;   }  }  return 1; }*/ void shudu(int a) {  if(flag==1)   return;  if(a==81)  {   flag=1;   for(int i=0;i<9;i++)   {    for(int j=0;j<9;j++)    {     printf("%d ",map[i][j]);    }    printf(" ");   }   return;  }   int x=a/9;   int y=a%9;   if(map[a/9][a%9]==0)   {    for(int i=1;i<=9;i++)    {     if(vistx[x][i]==0&&visty[y][i]==0&&vistkuai[x/3*3+y/3][i]==0)     {      vistx[x][i]=1;      visty[y][i]=1;      vistkuai[x/3*3+y/3][i]=1;      map[x][y]=i;      shudu(a+1);      map[x][y]=0;      vistx[x][i]=0;      visty[y][i]=0;      vistkuai[x/3*3+y/3][i]=0;     }    }   }   else    shudu(a+1); } int main() {  freopen("in.txt","r",stdin);  scanf("%d",&cass);  while(cass--)  {   for(int i=0;i<9;i++)   {    for(int j=0;j<9;j++)    {     scanf("%d",&map[i][j]);     if(map[i][j]!=0)     {      vistx[i][map[i][j]]=1;      visty[j][map[i][j]]=1;      vistkuai[i/3*3+j/3][map[i][j]]=1;     }    }   }   shudu(0);  }  return 0; }

原文地址:https://www.cnblogs.com/452035305qq/p/6207753.html