| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
正搜516MS,反搜0MS刚开始被吓着了,没想到一次就AC了
#include<stdio.h>
#include<string.h>
int flag,s=0,t[10][10],fx[10][10],fy[10][10],fs[10][10],f[10][10];
void dfs(int n)
{int i,j;
if(n==-1)
{flag=1;
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
{printf("%d",t[i][j]);
if(j==9)
puts("");
}
return;
}
if(flag)
return;
int x=n/9+1,y=n%9+1;
if(f[x][y])
dfs(n-1);
else
{for(i=1;i<=9;i++)
{
if(!fx[x][i]&&!fy[y][i]&&!fs[(x-1)/3*3+(y-1)/3][i])
{t[x][y]=i;
fx[x][i]=2;
fy[y][i]=2;
fs[(x-1)/3*3+(y-1)/3][i]=2;
dfs(n-1);
if(flag)
return;
t[x][y]=0;
fx[x][i]=0;
fy[y][i]=0;
fs[(x-1)/3*3+(y-1)/3][i]=0;
}
}
}
}
int main()
{int i,j,c;
scanf("%d",&c);
while(c--)
{char s[10];
memset(fx,0,sizeof(fx));
memset(fy,0,sizeof(fy));
memset(fs,0,sizeof(fs));
memset(f,0,sizeof(f));
flag=0;
for(i=1;i<=9;i++)
{scanf("%s",s);
for(j=1;j<=9;j++)
{t[i][j]=s[j-1]-'0';
if(t[i][j])
f[i][j]=1;
if(t[i][j])
{fx[i][t[i][j]]=1;
fy[j][t[i][j]]=1;
fs[(i-1)/3*3+(j-1)/3][t[i][j]]=1;
f[i][j]=1;
}
}
}
dfs(80);
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator