题目链接 :http://poj.org/problem?id=2676
Source Code #include <stdio.h> #include <stdlib.h> #include <string.h> int num[10][10] ,col[10][10] ,row[10][10] ,g[10][10] ,flag; void dfs (int count) { if (count == 81) { flag = 1; for (int i = 0 ;i < 9 ;i++) { for (int j = 0 ;j < 9 ;j++) printf("%d",num[i][j]); printf("\n"); } return ; } int x = count / 9 ,y = count % 9; if (num[x][y] != 0) { dfs(count + 1); return ; } else { int k = (x / 3) * 3 + y / 3; for (int j = 1 ;j <= 9 ;j++) { if (!row[x][j] && !col[y][j] && !g[k][j]) { row[x][j] = 1; col[y][j] = 1; g[k][j] = 1; num[x][y] = j; dfs(count + 1); if (flag) return ; row[x][j] = 0; col[y][j] = 0; g[k][j] = 0; num[x][y] = 0; } } } } int main () { int n; char arr[10]; scanf ("%d",&n); while (n--) { flag = 0; memset (col ,0 ,sizeof(col)); memset (row ,0 ,sizeof(row)); memset (g ,0 ,sizeof(g)); for (int i = 0 ;i < 9 ;i++) { scanf ("%s",arr); for (int j = 0 ;j < 9 ;j++) { num[i][j] = arr[j] - 48; if (num[i][j] != 0) row[i][num[i][j]] = col[j][num[i][j]] = g[(i / 3) * 3 + j / 3][num[i][j]] = 1; } } dfs(0); } return 0; }
这题模型貌似很简单(我个人认为啊)
快别扯淡了,我什么都不想听