这个题自己写的样例能过,但是提交总是output limit exceed。还没想明白到底哪里错了,
走过路过的帮忙看看哪里出问题?
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[20][20],n;
int hen[10][10],shu[10][10],kuai[10][10];
struct M
{
int x,y,k;
}s[1300];
int f(int xx,int yy)
{
if(xx>=1&&xx<=3&&yy>=1&&yy<=3)return 1;
else if(xx>=4&&xx<=6&&yy>=1&&yy<=3)return 4;
else if(xx>=7&&xx<=9&&yy>=1&&yy<=3)return 7;
else if(xx>=1&&xx<=3&&yy>=4&&yy<=6)return 2;
else if(xx>=4&&xx<=6&&yy>=4&&yy<=6)return 5;
else if(xx>=7&&xx<=9&&yy>=4&&yy<=6)return 8;
else if(xx>=1&&xx<=3&&yy>=7&&yy<=9)return 3;
else if(xx>=4&&xx<=6&&yy>=7&&yy<=9)return 6;
else if(xx>=7&&xx<=9&&yy>=7&&yy<=9)return 9;
}
int dfs(int nn)
{
int i,j,k,g;
k=0;
if(nn==-1)
{
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
cout<<a[i][j];
}cout<<endl;
}
return 0;
}
else
{
for(i=1;i<=9;i++)
{
if(hen[s[nn].x][i]==1||shu[s[nn].y][i]==1||kuai[s[nn].k][i]==1||a[s[nn].x][s[nn].y]!=0)continue;
if(hen[s[nn].x][i]==0&&shu[s[nn].y][i]==0&&kuai[s[nn].k][i]==0&&a[s[nn].x][s[nn].y]==0)
{
//cout<<s[nn].x<<" "<<s[nn].y<<" "<<i<<" "<<nn<<endl;
a[s[nn].x][s[nn].y]=i;
hen[s[nn].x][i]=1;shu[s[nn].y][i]=1;kuai[s[nn].k][i]=1;
dfs(nn-1);
a[s[nn].x][s[nn].y]=0;
hen[s[nn].x][i]=0;shu[s[nn].y][i]=0;kuai[s[nn].k][i]=0;
}
}
}
return 0;
}
main()
{
int cases,i,j,kk;
scanf("%d",&cases);
char c;
for(int tt=0;tt<cases;tt++)
{
memset(a,0,sizeof(a));
memset(s,0,sizeof(s));
memset(hen,0,sizeof(hen));
memset(shu,0,sizeof(shu));
memset(kuai,0,sizeof(kuai));
n=0;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
cin>>c;
//if(c>='0'&&c<='9')
a[i][j]= c-'0';
kk=f(i,j);
hen[i][a[i][j]]=1;
shu[j][a[i][j]]=1;
kuai[kk][a[i][j]]=1;
if(a[i][j]==0)
{
s[n].k=kk;
s[n].x=i;s[n].y=j;n=n+1;
}
}
}
dfs(n-1);
}
}
走过路过的帮忙看看哪里出问题?
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[20][20],n;
int hen[10][10],shu[10][10],kuai[10][10];
struct M
{
int x,y,k;
}s[1300];
int f(int xx,int yy)
{
if(xx>=1&&xx<=3&&yy>=1&&yy<=3)return 1;
else if(xx>=4&&xx<=6&&yy>=1&&yy<=3)return 4;
else if(xx>=7&&xx<=9&&yy>=1&&yy<=3)return 7;
else if(xx>=1&&xx<=3&&yy>=4&&yy<=6)return 2;
else if(xx>=4&&xx<=6&&yy>=4&&yy<=6)return 5;
else if(xx>=7&&xx<=9&&yy>=4&&yy<=6)return 8;
else if(xx>=1&&xx<=3&&yy>=7&&yy<=9)return 3;
else if(xx>=4&&xx<=6&&yy>=7&&yy<=9)return 6;
else if(xx>=7&&xx<=9&&yy>=7&&yy<=9)return 9;
}
int dfs(int nn)
{
int i,j,k,g;
k=0;
if(nn==-1)
{
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
cout<<a[i][j];
}cout<<endl;
}
return 0;
}
else
{
for(i=1;i<=9;i++)
{
if(hen[s[nn].x][i]==1||shu[s[nn].y][i]==1||kuai[s[nn].k][i]==1||a[s[nn].x][s[nn].y]!=0)continue;
if(hen[s[nn].x][i]==0&&shu[s[nn].y][i]==0&&kuai[s[nn].k][i]==0&&a[s[nn].x][s[nn].y]==0)
{
//cout<<s[nn].x<<" "<<s[nn].y<<" "<<i<<" "<<nn<<endl;
a[s[nn].x][s[nn].y]=i;
hen[s[nn].x][i]=1;shu[s[nn].y][i]=1;kuai[s[nn].k][i]=1;
dfs(nn-1);
a[s[nn].x][s[nn].y]=0;
hen[s[nn].x][i]=0;shu[s[nn].y][i]=0;kuai[s[nn].k][i]=0;
}
}
}
return 0;
}
main()
{
int cases,i,j,kk;
scanf("%d",&cases);
char c;
for(int tt=0;tt<cases;tt++)
{
memset(a,0,sizeof(a));
memset(s,0,sizeof(s));
memset(hen,0,sizeof(hen));
memset(shu,0,sizeof(shu));
memset(kuai,0,sizeof(kuai));
n=0;
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
cin>>c;
//if(c>='0'&&c<='9')
a[i][j]= c-'0';
kk=f(i,j);
hen[i][a[i][j]]=1;
shu[j][a[i][j]]=1;
kuai[kk][a[i][j]]=1;
if(a[i][j]==0)
{
s[n].k=kk;
s[n].x=i;s[n].y=j;n=n+1;
}
}
}
dfs(n-1);
}
}