zoukankan      html  css  js  c++  java
  • 洛谷—— P1784 数独

    https://www.luogu.org/problem/show?pid=1784

    题目描述

    数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫内的数字均含1-9,不重复。每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的。

    芬兰一位数学家号称设计出全球最难的“数独游戏”,并刊登在报纸上,让大家去挑战。

    这位数学家说,他相信只有“智慧最顶尖”的人才有可能破解这个“数独之谜”。

    据介绍,目前数独游戏的难度的等级有一道五级,一是入门等级,五则比较难。不过这位数学家说,他所设计的数独游戏难度等级是十一,可以说是所以数独游戏中,难度最高的等级他还表示,他目前还没遇到解不出来的数独游戏,因此他认为“最具挑战性”的数独游戏并没有出现。

    输入输出格式

    输入格式:

    一个未填的数独

    输出格式:

    填好的数独

    输入输出样例

    输入样例#1:
    8 0 0 0 0 0 0 0 0 
    0 0 3 6 0 0 0 0 0 
    0 7 0 0 9 0 2 0 0 
    0 5 0 0 0 7 0 0 0 
    0 0 0 0 4 5 7 0 0 
    0 0 0 1 0 0 0 3 0 
    0 0 1 0 0 0 0 6 8 
    0 0 8 5 0 0 0 1 0 
    0 9 0 0 0 0 4 0 0
    输出样例#1:
    8 1 2 7 5 3 6 4 9 
    9 4 3 6 8 2 1 7 5 
    6 7 5 4 9 1 2 8 3 
    1 5 4 2 3 7 8 9 6 
    3 6 9 8 4 5 7 2 1 
    2 8 7 1 6 9 5 3 4 
    5 2 1 9 7 4 3 6 8 
    4 3 8 5 2 6 9 1 7 
    7 9 6 3 1 8 4 5 2

    说明

    你猜,你猜,你猜猜猜

    猜不出来吧,我不告诉你~~~

    从最靠右下(改变顺序有时变快)没填数的点开始搜,

     1 #include <algorithm>
     2 #include <cstdio>
     3 
     4 const int pos[9][9]={{0,0,0,1,1,1,2,2,2},
     5                     {0,0,0,1,1,1,2,2,2},
     6                       {0,0,0,1,1,1,2,2,2},
     7                       {3,3,3,4,4,4,5,5,5},
     8                       {3,3,3,4,4,4,5,5,5},
     9                       {3,3,3,4,4,4,5,5,5},
    10                       {6,6,6,7,7,7,8,8,8},
    11                       {6,6,6,7,7,7,8,8,8},
    12                       {6,6,6,7,7,7,8,8,8}};
    13 bool h[9][10],l[9][10],g[9][10];
    14 int vx[82],vy[82],cnt,deep,map[9][9];
    15 
    16 void DFS(int num)
    17 {
    18     if(!num)
    19     {
    20         for(int i=0; i<9; ++i)
    21         {
    22             for(int j=0; j<9; ++j)
    23                 printf("%d ",map[i][j]);
    24             puts("");
    25         }
    26         std::exit(0);
    27     }
    28     if(++deep>1e7) return ;
    29     int tox=vx[num],toy=vy[num],topos=pos[tox][toy],tmp;
    30     for(int i=1; i<=9; ++i)
    31     {
    32         if(!h[tox][i]&&!l[toy][i]&&!g[topos][i])
    33         {
    34             h[tox][i]=1;
    35             l[toy][i]=1;
    36             g[topos][i]=1;
    37             map[tox][toy]=i;
    38             DFS(num-1);
    39             h[tox][i]=0;
    40             l[toy][i]=0;
    41             g[topos][i]=0;
    42             map[tox][toy]=0;
    43         }
    44     }
    45 }
    46 
    47 int AC()
    48 {
    49     for(int i=0; i<9; ++i)
    50         for(int j=0; j<9; ++j)
    51         {
    52             scanf("%d",&map[i][j]);
    53             if(!map[i][j])
    54             {
    55                 vx[++cnt]=i;
    56                 vy[cnt]=j;
    57             }
    58             else
    59             {
    60                 h[i][map[i][j]]=1;
    61                 l[j][map[i][j]]=1;
    62                 g[pos[i][j]][map[i][j]]=1;
    63             }
    64         }
    65     DFS(cnt);
    66     return 0;
    67 }
    68 
    69 int Aptal=AC();
    70 int main(){;}
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    申诉电信ADSL宽带限速
    回帖整理
    继续无题
    抛砖引玉,征集体会
    关于程序组织和组织技巧的学习
    周鸿祎行
    无题
    用此书为例讨论下软件思想的学习
    笔记
    方法论究竟为社区提供了什么
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7502606.html
Copyright © 2011-2022 走看看