1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include<stdio.h> int tol=0; bool judge(int x, int y, int a[][9], int num){ for(int i=0; i<9; i++){ if(a[x][i]==num) return 0; if((a[i][y])==num) return 0; if(a[(x/3)*3+i/3][(y/3)*3+i%3]==num) return 0; } return 1; } void dfs(int x, int y, int a[][9]){ while(a[x][y]!=0){ if(x==8&&y==8){ tol++; for(int i=0; i<81; i++){ printf("%d", a[i/9][i%9]); if((i+1)%9) printf(" "); else printf("\n"); } printf("\n"); } if(y==8){ y=0; x++; } else y++; } for(int i=1; i<=9; i++){ if(judge(x, y, a, i)){ a[x][y] = i; dfs(x, y, a); } a[x][y] = 0; } } int main(){ int a[9][9]; for(int i=0; i<9; i++){ for(int j=0; j<9; j++){ scanf("%d", &a[i][j]); } } dfs(0, 0, a); printf("there are a total of %d solution(s).\n", tol); }
|