• 37. Sudoku Solver


    欢迎fork and star:Nowcoder-Repository-github

    37. 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~9依次遍历,不行的时候就回退
    // 37. Sudoku Solver
    class Solution_37 {
    public:
    	bool isValid(vector<vector<char>>& board,int i,int j) //只需要判断当前行,列,方格是否合法,节省时间
    	{
    		for (int row = 0; row < 9;row++)
    		{
    			if (row!=i&&board[i][j]==board[row][j])
    			{
    				return false;
    			}
    		}
    		for (int col = 0; col < 9;col++)
    		{
    			if (col!=j&&board[i][j]==board[i][col])
    			{
    				return false;
    			}
    		}
    		for (int row = i / 3 * 3; row < i / 3 * 3 + 3;row++)
    		{
    			for (int col = j / 3 * 3; col < j / 3 * 3 + 3;col++)
    			{
    				if ((row!=i||col!=j)&&board[i][j]==board[row][col]) //小方格也需要行列判断
    				{
    					return false;
    				}
    			}
    		}
    		return true;
    	}
    
    	bool dfs(vector<vector<char> > &board,int i,int j)
    	{
    		if (i==9)
    		{
    			return true;
    		}
    		if (j==9)
    		{
    			return dfs(board, i + 1, 0);
    		}
    
    		if (board[i][j]=='.')
    		{
    			for (char k = '1'; k <='9';k++)
    			{
    				board[i][j] = k;
    				if (isValid(board,i,j))
    				{
    					if (dfs(board, i, j + 1))
    					{
    						return true;
    					}
    				}
    				board[i][j] = '.'; //达到回溯的目的
    			}
    		}
    		else
    		{
    			return dfs(board, i, j + 1);
    		}
    		return false;
    	}
    
    	void solveSudoku(vector<vector<char>>& board) {
    
    		if (board.size()<9||board[0].size()<9)
    		{
    			return;
    		}
    		dfs(board, 0, 0);
    		return;
    	}
    };
    

    题目来源

  • 相关阅读:
    leetcode回溯总结
    排序算法详解
    Java核心基础知识泛型
    leetcode贪心算法
    Linux虚拟机配置及安装Redis
    HJ6质数因子
    冒泡排序(升序)
    动态规划 背包问题
    配置mycatschema.xml
    HJ106字符逆序
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/8398097.html
Copyright © 2020-2023  润新知