【ZOJ】2580【搜索】【suduku】

来源:互联网 发布:微信授权回调域名多个 编辑:程序博客网 时间:2024/06/05 20:37


Sample Input

1
103000509
002109400
000704000
300502006
060000050
700803004
000401000
009205800
804000107

Sample Output
143628579
572139468
986754231
391542786

468917352
725863914

237481695
619275843
854396127

*******************************************************************************************************************


#include<stdio.h>struct shu{    int date;    int x;    int y;} shu[9][9];int DFS(int i,int j){    int s,t,m;    if(j==9){        j=0;        i++;        if(i==9)            return 1;//全部填满    }    while(shu[i][j].date){        j++;        if(j==9)        {            j=0;            i++;            if(i==9)                return 1;        }    }    for(m=1; m<10; m++){        for(s=0; s<9; s++){            if(shu[i][s].date==m)                break;            if(shu[s][j].date==m)                break;        }        if(s==9){            for(s=shu[i][j].x-3; s<shu[i][j].x; s++){                for(t=shu[i][j].y-3; t<shu[i][j].y; t++)                    if(m==shu[s][t].date)                        break;                if(t<shu[i][j].y)                    break;            }            if(s==shu[i][j].x){                shu[i][j].date=m;                if(DFS(i,j+1))//成功                    return 1;                shu[i][j].date=0;            }        }    }    return 0;}int main(){    int n,i,j;    scanf("%d",&n);    for(i=0; i<9; i++){        for(j=0; j<9; j++){            if(i>=0&& i<3)                shu[i][j].x=3;            else if(i>=3 &&i<6)            shu[i][j].x=6;            else                shu[i][j].x=9;            if(j>=0&& j<3)                shu[i][j].y=3;            else if(j>=3 &&j<6)            shu[i][j].y=6;            else                shu[i][j].y=9;        }    }    while(n--){        for(i=0; i<9; i++){            getchar();            for(j=0; j<9; j++)            {                scanf("%c",&shu[i][j].date);                shu[i][j].date-=48;            }        }        DFS(0,0);        for(i=0; i<9; i++){            for(j=0; j<9; j++)                printf("%c",shu[i][j].date+48);            printf("\n");        }    }    return 0;}


原创粉丝点击