Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

正搜516MS,反搜0MS

Posted by windows8 at 2009-11-09 20:51:15 on Problem 2676
刚开始被吓着了,没想到一次就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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator