bzoj 3109: [cqoi2013]新数独

Posted xiyuedong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj 3109: [cqoi2013]新数独相关的知识,希望对你有一定的参考价值。

 1 #include<cstdio>
 2 #include<iostream> 
 3 using namespace std;
 4 int ha[10][10],li[10][10],xi[10][10],a[10][10],bh[10][10],bl[10][10],kg;
 5 char ch[5];
 6 bool pan(int x,int y,int i)
 7 {
 8     if(ha[x][i]||li[y][i]||xi[(x-1)/3*3+(y-1)/3][i])
 9       return 0;
10     if((y-1)%3!=0&&(bh[x][y]^(i>a[x][y-1])))
11       return 0;
12     if((x-1)%3!=0&&(bl[x][y]^(i>a[x-1][y])))
13       return 0;
14     return 1;  
15 }
16 void dfs(int x,int y)
17 {
18     //if(a[1][1]==4&&a[1][2]==9&&a[1][3]==1&&a[1][4]==7&&a[1][5]==3&&a[1][6]==6&&a[1][7]==5&&a[1][8]==2)
19       //{
20         //printf(" ");
21       //}
22     if(kg)
23       return;
24     if(y==10)
25       {
26         x++;
27         y=1;
28       }
29     if(x==10)
30       {
31         kg=1;
32         for(int i=1;i<=9;i++)
33           {
34             for(int j=1;j<=9;j++)
35               {
36                  printf("%d",a[i][j]);
37                  if(j!=9)
38                    printf(" ");
39               }
40             printf("\n");
41             }
42         return;
43       }
44     for(int i=1;i<=9;i++)
45       if(pan(x,y,i))
46         {
47             a[x][y]=i;
48             ha[x][i]=1;
49             li[y][i]=1;
50             xi[(x-1)/3*3+(y-1)/3][i]=1;
51             dfs(x,y+1);
52             ha[x][i]=0;
53             li[y][i]=0;
54             xi[(x-1)/3*3+(y-1)/3][i]=0;
55         }
56 }
57 int main()
58 {
59     for(int i=1;i<=9;i++)
60       {
61         for(int j=1;j<9;j++)
62           if(j%3)
63             {
64               scanf("%s",ch);
65               if(ch[0]==<)
66                 bh[i][j+1]=1;
67               else
68                 bh[i][j+1]=0;
69             }
70         if(i%3)
71           for(int j=1;j<=9;j++)
72             {
73                 scanf("%s",ch);
74                 if(ch[0]==^)
75                   bl[i+1][j]=1;
76                 else
77                   bl[i+1][j]=0;
78             }
79       }
80     dfs(1,1);
81     return 0;
82 }

一个非常恶心的搜索。

以上是关于bzoj 3109: [cqoi2013]新数独的主要内容,如果未能解决你的问题,请参考以下文章

bzoj3109 [cqoi2013]新数独

3109. [CQOI2013]新数独搜索

[cqoi2013]新数独

[cqoi2013]新数独

CQOI2013 新数独

刷题搜索新数独