• 2021.5.9-数独(回溯)


    题目链接:https://leetcode-cn.com/problems/sudoku-solver
    题目描述:
    编写一个程序,通过填充空格来解决数独问题。
    数独的解法需 遵循如下规则:
    数字 1-9 在每一行只能出现一次。
    数字 1-9 在每一列只能出现一次。
    数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
    数独部分空格内已填入了数字,空白格用 '.' 表示。

    题解:
    题解详解

    
    class Solution {
    public:
        bool isValid(int row, int col,char val, vector<vector<char>>& board)
        {
            //校验每行是否重复
            for(int i = 0; i < 9; i++)
            {
                if(board[i][col] == val)
                    return false;
            }
            //校验每列是否重复
            for(int j = 0; j < 9; j++)
            {
                if(board[row][j] == val)
                    return false;
            }
            //校验3*3宫内是否重复
            int minRow = (row / 3) * 3;
            int minCol = (col / 3) * 3;
            for(int i = minRow; i < minRow + 3; i++)
            {
                for(int j = minCol; j < minCol + 3; j++)
                {
                    if(board[i][j] == val)
                        return false;
                }
            }
            return true;
     
        }
    
        bool trackingBack(int row, int col, vector<vector<char>>& board)
        {
            //迭代到最后一行即结束
            if(row == board.size())
                return true;
            //迭代到最后一列即进入下一行第一列继续
            if(col == board[0].size())
                return trackingBack(row + 1, 0, board);
            //迭代的位置已经有数值,继续向后查找
            if(board[row][col] != '.')
                return trackingBack(row, col +1 , board);
            //找到可放数值位置后,从1-9中选择一个合法值放入
            for(char k = '1'; k <= '9'; k++)
            {
                if(isValid(row, col, k, board))
                {
                   board[row][col] = k;
                   if(trackingBack(row, col + 1, board))
                      return true;
                   board[row][col] = '.';                 
                }
            }
            return false;
        }
    
    
        void solveSudoku(vector<vector<char>>& board) {
            trackingBack(0 , 0, board);
        }
    };
    
    
  • 相关阅读:
    墙内正确安装docker和docker-compose的方法
    VS2015编译ncnn
    caffe模型转ncnn模型
    Ncnn-Installation-on-Windows
    CV2 Fourcc解析
    手动安装OpenCV下的IPP加速库
    Ubuntu下安装Caffe
    Linux安装CUDA教程参考
    最正确的姿势安装cudnn,网上大多数教程都太坑了
    安装多版本cuda时,nvcc和cuda版本不一致问题
  • 原文地址:https://www.cnblogs.com/ZigHello/p/14750764.html
Copyright © 2020-2023  润新知