2676Sudoku

这个题自己写的样例能过,但是提交总是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);


    }
}

猜你喜欢

转载自zhouxiaojie.iteye.com/blog/1594674