Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1426

DFS

View Code
 1 #include <stdio.h>
2 #include <string.h>
3 int r[10][10],c[10][10],g[10][10],a[10][10],flag;
4 int f(int x,int y)
5 {
6 return (x-1)/3*3+(y-1)/3+1;
7 }
8 void dfs(int u)
9 {
10 if (flag) return;
11 while ((u%10==0 || a[u/10][u%10]) && u<100) u++;
12 if (u>=100) {flag=1; return;}
13 int i,x,y;
14 x=u/10; y=u%10;
15 for (i=1;i<=9;i++)
16 if (!r[x][i] && !c[y][i] && !g[f(x,y)][i])
17 {
18 a[x][y]=i;
19 r[x][i]=1; c[y][i]=1; g[f(x,y)][i]=1;
20 dfs(u+1); if (flag) return;
21 r[x][i]=0; c[y][i]=0; g[f(x,y)][i]=0;
22 a[x][y]=0;
23 }
24 }
25 int main()
26 {
27 char ch;
28 int i,j,C=0;
29 while (scanf("%s",&ch)!=EOF)
30 {
31 memset(r,0,sizeof(r));
32 memset(c,0,sizeof(c));
33 memset(g,0,sizeof(g));
34 memset(a,0,sizeof(a));
35 flag=0;
36 for (i=1;i<=9;i++)
37 for (j=1;j<=9;j++)
38 {
39 if (!(i==1 && j==1)) scanf("%s",&ch);
40 if (ch=='?') continue;
41 ch-='0'; a[i][j]=ch;
42 r[i][ch]=1; c[j][ch]=1;
43 g[f(i,j)][ch]=1;
44 }
45 dfs(11);
46 if (C) printf("\n");
47 else C++;
48 for (i=1;i<=9;i++)
49 {
50 for (j=1;j<9;j++) printf("%d ",a[i][j]);
51 printf("%d\n",a[i][9]);
52 }
53 }
54 }

 

posted on 2011-12-24 17:19  Qiuqiqiu  阅读(157)  评论(0编辑  收藏  举报