首页 > 其他 > 详细

HDU 1426 Sudoku Killer

时间:2014-02-10 16:53:17      阅读:369      评论:0      收藏:0      [点我收藏+]

就是把数字全填上,然后检验是否可以…… 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <cstdio>
int map[9][9],num,flag;
struct stu{
    int x,y;
}p[81];
int check(int k,int cur)
{
    int i,j;
    for(i=0;i<9;i++)
    if(map[p[cur].x][i]==k||map[i][p[cur].y]==k)return 0;
    int x=p[cur].x/3*3;
    int y=p[cur].y/3*3;
    for(i=0;i<3;i++)
    for(j=0;j<3;j++)
    if(map[x+i][y+j]==k)return 0;
    return 1;
}
void dfs(int cur)
{
    int i,j;
    if(cur==num)
    {
        for(i=0;i<9;i++){
            for(j=0;j<8;j++)
            printf("%d ",map[i][j]);
            printf("%d\n",map[i][8]);
         }
         flag=1; return;
    }
    for(i=1;i<=9;i++)
    {
        if(check(i,cur)&&!flag){
            map[p[cur].x][p[cur].y]=i;
            dfs(cur+1);
            map[p[cur].x][p[cur].y]=0;
        }
    }
    return;
}
int main()
{
    int i,j,c=0;
    char a[3];
    while(scanf("%s",a)!=EOF){
        num=0;
        if(a[0]==‘?‘){p[num].x=0;p[num].y=0;num++;map[0][0]=0;}
        else map[0][0]=a[0]-‘0‘;
        for(i=0;i<9;i++){
            for(j=0;j<9;j++){
                if(i==0&&j==0)continue;
                scanf("%s",a);
                if(a[0]==‘?‘){
                    map[i][j]=0;
                    p[num].x=i;
                    p[num].y=j;
                    num++;
                }
                else map[i][j]=a[0]-‘0‘;
            }
        }
        flag=0;
        if(c++) printf("\n");
        dfs(0);
    }
    return 0;
}

HDU 1426 Sudoku Killer

原文:http://www.cnblogs.com/forever97/p/3542831.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!