zoukankan      html  css  js  c++  java
  • [Leetcode] 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.

    A sudoku puzzle...

    ...and its solution numbers marked in red.

    暴力DFS!

     1 class Solution {
     2 public:
     3     bool isValid(vector<vector<char> > &board, int a, int b) {
     4         for (int i = 0; i < 9; ++i) {
     5             if (i != a && board[i][b] == board[a][b])
     6                 return false;
     7         }
     8         for (int j = 0; j < 9; ++j) {
     9             if (j != b && board[a][j] == board[a][b])
    10                 return false;
    11         }
    12         int x = a / 3 * 3, y = b / 3 * 3;
    13         for (int i = 0; i < 3; ++i) {
    14             for (int j = 0; j < 3; ++j) {
    15                 if (x + i != a && y + j != b && board[x + i][y + j] == board[a][b])
    16                     return false;
    17             }
    18         }
    19         return true;
    20     }
    21     
    22     bool solveHelper(vector<vector<char> > &board) {
    23         for (int i = 0; i < 9; ++i) {
    24             for (int j = 0; j < 9; ++j) {
    25                 if (board[i][j] == '.') {
    26                     for (int k = 1; k <= 9; ++k) {
    27                         board[i][j] = '0' + k;
    28                         if (isValid(board, i, j) && solveHelper(board)) {
    29                             return true;
    30                         }
    31                         board[i][j] = '.';
    32                     }
    33                     return false;
    34                 }
    35             }
    36         }
    37         return true;
    38     }
    39     
    40     void solveSudoku(vector<vector<char> > &board) {
    41         solveHelper(board);
    42     }
    43 };
  • 相关阅读:
    家庭记账本开发进度6
    家庭记账本开发进度5
    家庭记账本开发进度4
    家庭记账本开发笔记3
    大道至简阅读笔记01
    个人作业 数组(续)
    二维数组
    个人作业1-数组
    软件工程第一周开课微博
    第一周学习进度条报告
  • 原文地址:https://www.cnblogs.com/easonliu/p/3662904.html
Copyright © 2011-2022 走看看