| ||||||||||
| 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 | |||||||||
神级菜鸟的代码,大神轻喷#include<stdio.h>
int map[10][10],flag;
struct tmp
{
int x,y;
}rec[81];
int check(int x,int y,int num)
{
int i;
for(i=0;i<9;i++)//检查横竖
{
if(map[x][i]==num)
return 0;
if(map[i][y]==num)
return 0;
}
int p,q;
for(p=x/3*3;p<=x/3*3+2;p++)//英语看不懂,不知道3*3里不能有同样的数字= =纠结半天
{
for(q=y/3*3;q<=y/3*3+2;q++)
{
if(map[p][q]==num)
return 0;
}
}
return 1;
}
void dfs(int countr)
{
if(countr==-1)
{
flag=1;
return ;
}
for(int i=1;i<=9;i++)
{
if(check(rec[countr].x,rec[countr].y,i))
{
map[rec[countr].x][rec[countr].y]=i;//填格
dfs(countr-1);
if(flag)
return ;
map[rec[countr].x][rec[countr].y]=0;//回溯
}
}
return ;
}
int main()
{
int t,countr,i,j;
char s[10];
scanf("%d\n",&t);
while(t--)
{
flag=0;
countr=0;
for(i=0;i<9;i++)
{
gets(s);
for(j=0;j<9;j++)
{
map[i][j]=s[j]-'0';
if(!map[i][j])//记录要填的格子
{
rec[countr].x=i;
rec[countr++].y=j;
}
}
}
dfs(--countr);//据说后面搜起比较快= =
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
printf("%d",map[i][j]);
printf("\n");
}
}
return 0;
}
没有初始化,本来以为会wa想不到过了,那就算了
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator