• leetcode113: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.

    class Solution {
    public:
        void solveSudoku(vector<vector<char>>& board) {
            vector<vector<int>> used1(9,vector<int>(9,0)),used2(9,vector<int>(9,0)),used3(9,vector<int>(9,0));
                fillnum(used1,used2,used3,board);
                solve(used1,used2,used3,board);  
        }
         
        void fillnum(vector<vector<int>> &used1,vector<vector<int>> &used2,vector<vector<int>> &used3,vector<vector<char> > &board) {
            for(int i=0;i<board.size();i++)
                for(int j=0;j<board[0].size();j++)
                if(board[i][j]!='.')
                {
                    int num=board[i][j]-'0'-1;
                    int k=i/3*3+j/3;
                        used1[i][num]=used2[j][num]=used3[k][num]=1;
                }
        }
          
        bool solve(vector<vector<int>> &used1,vector<vector<int>> &used2,vector<vector<int>> &used3,vector<vector<char>>&board){
           for(int i=0;i<board.size();i++)
                for(int j=0;j<board[0].size();j++){
                    int k=i/3*3+j/3;
                    if(board[i][j]=='.'){
                        for(int fill=1;fill<10;fill++){
                            if(used1[i][fill-1]==0 && used2[j][fill-1]==0 && used3[k][fill-1]==0){
                            board[i][j]=fill+'0';
                            used1[i][fill-1]=used2[j][fill-1]=used3[k][fill-1]=1;
                            if(solve(used1,used2,used3,board))
                                return true;                            
                            board[i][j]='.';
                            used1[i][fill-1]=used2[j][fill-1]=used3[k][fill-1]=0;
                            }                        
                    }   
                        return false;
                    }            
                }
            return true;
        }
    };
  • 相关阅读:
    [Swift]LeetCode843. 猜猜这个单词 | Guess the Word
    [Swift]LeetCode852. 山脉数组的峰顶索引 | Peak Index in a Mountain Array
    [Swift]LeetCode867. 转置矩阵 | Transpose Matrix
    [Swift]LeetCode859. 亲密字符串 | Buddy Strings
    [Swift]LeetCode844. 比较含退格的字符串 | Backspace String Compare
    [Swift]LeetCode824. 山羊拉丁文 | Goat Latin
    PHP 分析1
    php 分析
    停下库
    常用sql
  • 原文地址:https://www.cnblogs.com/hrnn/p/13415273.html
Copyright © 2020-2023  润新知