zoukankan      html  css  js  c++  java
  • Sudoku solver

    题目: 

    Write a program to solve a Sudoku puzzle by filling the empty cells.

    Empty cells are indicated by the character '.'.

    You may assume that there will be only one unique solution.

    思路: 回溯法,当有可行解时返回

    代码:

     1 class Solution {
     2     bool isValid(vector<vector<char> >& board, int x, int y)
     3     {
     4         bool flags[9] = {0};
     5         for(int i = 0; i < 9; ++i)
     6             if(board[x][i] >= '1' && board[x][i] <= '9')
     7             {
     8                 if(!flags[board[x][i] - '1'])
     9                     flags[board[x][i] - '1'] = true;
    10                 else
    11                     return false;
    12             }
    13         memset(flags, 0, 9);
    14         for(int i = 0; i < 9; ++i)
    15             if(board[i][y] >= '1' && board[i][y] <= '9')
    16             {
    17                 if(!flags[board[i][y] - '1'])
    18                     flags[board[i][y] - '1'] = true;
    19                 else
    20                     return false;
    21             }
    22         int xx = x/3*3;
    23         int yy = y/3*3;
    24         memset(flags, 0, 9);
    25         for(int i = 0; i < 3; ++i)
    26             for(int j = 0; j < 3; ++j)
    27                 if(board[xx+i][yy+j] >= '1' && board[xx+i][yy+j] <= '9')
    28                 {
    29                     if(!flags[board[xx+i][yy+j]-'1'])
    30                         flags[board[xx+i][yy+j]-'1'] = true;
    31                     else
    32                         return false;
    33                 }
    34         return true;
    35     }
    36 public:
    37     bool solveSudoku(vector<vector<char> > &board) {
    38         for(int i = 0; i < 9; ++i)
    39             for(int j = 0; j < 9; ++j)
    40             {
    41                 if('.' == board[i][j])
    42                 {
    43                     for(int k = 1; k <= 9; ++k)
    44                     {
    45                         board[i][j] = '0' + k;
    46                         if(isValid(board, i, j) && solveSudoku(board))
    47                             return true;
    48                         board[i][j] = '.';
    49                     }
    50                     return false;
    51                 }
    52             }
    53         return true;
    54     }
    55 };
  • 相关阅读:
    # 类和模板小结
    # Clion复制提示信息
    # IDEA相关知识
    # MySQL 笔记
    # MATLAB笔记
    # Mac地址
    # 丢包&&掉帧&&文件删除
    HDU 5744 Keep On Movin
    POJ 1852 Ants
    HDU 2795 Billboard
  • 原文地址:https://www.cnblogs.com/tanghulu321/p/3063957.html
Copyright © 2011-2022 走看看