| ||||||||||
| 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 | |||||||||
谢谢分享In Reply To:我觉得我的代码 ,挺好看的,贴出来晒晒。 Posted by:104GOGO at 2011-07-11 12:02:54 > #include<stdio.h>
> #include<string.h>
>
> int map[10][10],ar[80][2],used1[10][10],used2[10][10];
>
> int judge(int j,int k,int i)//宫,j/3*3很巧妙啊
> {
> int p,q;
> for(p=j/3*3;p<=j/3*3+2;p++)
> {
> for(q=k/3*3;q<=k/3*3+2;q++)
> {
> if(map[p][q]==i)return 0;
> }
> }
> return 1;
> }
>
> int dfs(int num)//0的个数
> {
> int i,j,k;
> j=ar[num][0],k=ar[num][1];
> if(num<0)return 1;
> for(i=0;i<9;i++)//填数
> {
> if(judge(j,k,i+1)&&!used1[j][i]&&!used2[k][i])//if这后面熟悉不?
> {
> used1[j][i]=used2[k][i]=1;
> map[j][k]=i+1;
> if(dfs(num-1))return 1;
> used1[j][i]=used2[k][i]=0;
> map[j][k]=0;
> }
> }
> return 0;
> }
>
> int main()
> {
> int i,j,T,num;
> char str[10];
> scanf("%d",&T);
> while(T--)
> {
> memset(used1,0,sizeof(used1));
> memset(used2,0,sizeof(used2));
> num=0;
> for(i=0;i<9;i++)
> {
> scanf("%s",str);
> for(j=0;j<9;j++)
> {
> map[i][j]=str[j]-'0';
> if(!map[i][j])//记录0的位置
> {
> ar[num][0]=i;
> ar[num][1]=j;
> num++;
> }
> if(map[i][j])used1[i][map[i][j]-1]=1;//记录第i行的数
> }
> }
> for(j=0;j<9;j++)
> {
> for(i=0;i<9;i++)
> {
> if(map[i][j])used2[j][map[i][j]-1]=1;//记录第j列的数
> }
> }
> dfs(num-1);
> for(i=0;i<9;i++)
> {
> for(j=0;j<9;j++)
> printf("%d",map[i][j]);
> printf("\n");
> }
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator