题目链接 :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;
}
这题模型貌似很简单(我个人认为啊)