POJ 2676 Sudoku(DFS)

题目链接

判断条件没搞好 2Y,全部是0的时候查出错。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char p[11][11];
int key[11][11];
int r[11][11],c[11][11],o[11][11],z;
int judge(int i,int j)
{
    int a;
    if(i <= 2)
    {
        if(j <= 2)
            a = 0;
        else if(j <= 5)
            a = 1;
        else if(j <= 8)
            a = 2;
    }
    else if(i <= 5)
    {
        if(j <= 2)
            a = 3;
        else if(j <= 5)
            a = 4;
        else if(j <= 8)
            a = 5;
    }
    else if(i <= 8)
    {
        if(j <= 2)
            a = 6;
        else if(j <= 5)
            a = 7;
        else if(j <= 8)
            a = 8;
    }
    return a;
}
void dfs(int x,int y)
{
    int a,b,i,j;
    if(z) return ;
    j = judge(x,y);
    if(x == 9&&y == 0)
    {
        for(i = 0; i <= 8; i ++)
        {
            for(j = 0; j <= 8; j ++)
            printf("%d",key[i][j]);
            printf("\n");
        }
        z = 1;
        return ;
    }
    if(x > 8) return ;
    if(y == 8)
    {
        a = x+1;
        b = 0;
    }
    else
    {
        a = x;
        b = y+1;
    }
    if(key[x][y] != 0)
        dfs(a,b);
    else
    {
        for(i = 1; i <= 9; i ++)
        {
            if(!r[x][i]&&!c[y][i]&&!o[j][i])
            {
                r[x][i] ++;
                c[y][i] ++;
                o[j][i] ++;
                key[x][y] = i;
                dfs(a,b);
                key[x][y] = 0;
                r[x][i] = 0;
                c[y][i] = 0;
                o[j][i] = 0;
            }
        }
    }
}
int main()
{
    int i,j,k,t;
    scanf("%d%*c",&t);
    while(t--)
    {
        z = 0;
        memset(key,0,sizeof(key));
        memset(r,0,sizeof(r));
        memset(c,0,sizeof(c));
        memset(o,0,sizeof(o));
        for(i = 0; i <= 8; i ++)
            gets(p[i]);
        for(i = 0; i <= 8; i ++)
            for(j = 0; j <= 8; j ++)
            {
                if(p[i][j] != '0')
                {
                    key[i][j] = p[i][j] - '0';
                    k = key[i][j];
                    r[i][k] ++;
                    c[j][k] ++;
                    o[judge(i,j)][k]++;
                }
            }
        dfs(0,0);
    }
    return 0;
}

  

posted @ 2012-07-11 18:11  Naix_x  阅读(161)  评论(0)    收藏  举报