• poj2676 Sudoku


    题意:

        数独游戏。

    思路:

        深搜。

    实现:

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 int n;
     5 int now[9][9], row[9][10], col[9][10], block[3][3][10];
     6 bool flag = false;
     7 
     8 bool check(int x, int y, int i)
     9 {
    10     if (!row[x][i] && !col[y][i] && !block[x / 3][y / 3][i])
    11     {
    12         row[x][i] = col[y][i] = block[x / 3][y / 3][i] = 1;
    13         return true;
    14     }
    15     return false;
    16 }
    17 
    18 void back_trace(int x, int y, int i)
    19 {
    20     now[x][y] = row[x][i] = col[y][i] = block[x / 3][y / 3][i] = 0;
    21 }
    22 
    23 void dfs(int x, int y)
    24 {
    25     if (flag)
    26         return;
    27     if (x == 9)
    28     {
    29         for (int i = 0; i < 9; i++)
    30         {
    31             for (int j = 0; j < 9; j++)
    32             {
    33                 cout << now[i][j];
    34             }
    35             puts("");
    36         }
    37         flag = true;
    38         return;
    39     }
    40     int nx = (y == 8 ? x + 1 : x);
    41     int ny = (y == 8 ? 0 : y + 1);
    42     if (now[x][y])
    43         dfs(nx, ny);
    44     else
    45     {
    46         for (int i = 1; i <= 9; i++)
    47         {
    48             if (check(x, y, i))
    49             {
    50                 now[x][y] = i;
    51                 dfs(nx, ny);
    52                 back_trace(x, y, i);
    53             }
    54         }
    55     }
    56 }
    57 int main()
    58 {
    59     cin >> n;
    60     char tmp;
    61     while (n--)
    62     {
    63         flag = false;
    64         for (int i = 0; i < 9; i++)
    65         {
    66             for (int j = 1; j <= 9; j++)
    67             {
    68                 row[i][j] = col[i][j] = 0;
    69             }
    70         }
    71         for (int i = 0; i < 3; i++)
    72         {
    73             for (int j = 0; j < 3; j++)
    74             {
    75                 for (int k = 1; k <= 9; k++)
    76                     block[i][j][k] = 0;
    77             }
    78         }
    79         for (int i = 0; i < 9; i++)
    80         {
    81             for (int j = 0; j < 9; j++)
    82             {
    83                 cin >> tmp;
    84                 now[i][j] = tmp - '0';
    85                 if (now[i][j])
    86                 {
    87                     row[i][now[i][j]] = 1;
    88                     col[j][now[i][j]] = 1;
    89                     block[i / 3][j / 3][now[i][j]] = 1;
    90                 }
    91             }
    92         }
    93         dfs(0, 0);
    94     }
    95     return 0;
    96 }
  • 相关阅读:
    hutool 解析 Excel
    上传文件
    Cannot construct instance of `com.**` (although at least one Creator exists)
    Java8之Optional
    java8之Stream
    java8之Lambda
    springboot+mybatis事务管理
    queryWrapper in like
    Java 组装 Tree
    JWT
  • 原文地址:https://www.cnblogs.com/wangyiming/p/6346690.html
Copyright © 2020-2023  润新知