SuDoKu_DFS_9*9
40Ms
1 #include <stdio.h> 2 #include <string.h> 3 #include <time.h> 4 int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; 5 int num[9][9]; 6 void Dfs(int,int); 7 bool Check(); //检测数独数组是否满足要求 8 bool Check_(int,int,int); //检测一行&一列&3*3小格子是否有相同的数 9 10 void input(void) 11 { 12 char str[10]; 13 for(int i=0;i<9;i++) 14 { 15 scanf("%s",str); 16 for(int j=0;j<9;j++) 17 num[i][j]=str[j]-'0'; 18 } 19 } 20 21 int main() 22 { 23 input(); 24 clock_t start=clock(); 25 Dfs(0,0); 26 printf("Time: %ld Ms",clock()-start); 27 fflush(stdin); 28 getchar(); 29 return 0; 30 } 31 32 void Dfs(int x,int y) 33 { 34 int i,j,k; 35 if(Check()) 36 { 37 for(i=0;i<9;i++) 38 { 39 for(j=0;j<9;j++) 40 printf("%d ",num[i][j]); 41 printf("\n"); 42 } 43 printf("\n"); 44 return; 45 } 46 if(num[x][y]==0) 47 { 48 for(i=1;i<10;i++) 49 { 50 if(Check_(x,y,i)) continue;//检测一行&一列&3*3小格子是否有相同的数 51 num[x][y]=i; 52 //printf("i:%d,j:%d\n",x,y); 53 if(y+1<9) 54 Dfs(x,y+1); 55 else if(y+1==9) 56 Dfs(x+1,0); 57 } 58 num[x][y]=0; 59 } 60 else if(num[x][y]!=0) 61 { 62 if(y+1<9) 63 Dfs(x,y+1); 64 else if(y+1==9) 65 Dfs(x+1,0); 66 } 67 return; 68 } 69 70 bool Check(void) 71 { 72 int i,j; 73 for(i=0;i<9;i++) 74 for(j=0;j<9;j++) 75 if(num[i][j]==0) 76 return false; 77 return true; 78 } 79 80 bool Check_(int x,int y,int n) 81 { 82 int i,j; 83 for(i=0;i<9;i++) 84 { 85 if(num[x][i]==n) return true; 86 if(num[i][y]==n) return true; 87 } 88 for(i=x/3*3;i<x/3*3+3;i++) 89 for(j=y/3*3;j<y/3*3+3;j++) 90 if(num[i][j]==n) 91 return true; 92 return false; 93 } 94 /* 95 070680050 96 000000001 97 409507000 98 560000340 99 000000000 100 034000017 101 000703804 102 300000000 103 090015030 104 */
——现在的努力是为了小时候吹过的牛B!!

浙公网安备 33010602011771号