主页 > 人工智能  > 

每日一题——37.解数独

每日一题——37.解数独

题目链接:37. 解数独 - 力扣(LeetCode)

代码:  

class Solution { public: bool isvalied(int i,int j,char k,vector<vector<char>>board) { //行合法 for(int row = 0;row < board.size();row++) { if(board[row][j] == k) return false; } //列合法 for(int col = 0;col < board[0].size();col++) { if(board[i][col] == k) return false; } //九宫格合法 int startrow = (i/3) * 3; int startcol = (j/3) * 3; for(int row = startrow;row < startrow+3;row++) { for(int col = startcol;col < startcol+3;col++) { if(board[row][col] == k) return false; } } return true; } bool traversal(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] != '.') continue; for(char k = '1';k <= '9';k++) { if(isvalied(i,j,k,board)) { board[i][j] = k; if(traversal(board)) return true; board[i][j] = '.'; } } return false; } } return true; //有必要吗 } void solveSudoku(vector<vector<char>>& board) { traversal(board); } };

回溯三部曲:

直接引用传入board ,修改board的数值

返回return bool值,判断当前路劲是否合法

这里我纠结的问题是为什么前面return false和return true的情况都有了,结尾还要再返回return true

--在所有棋盘都填满了的情况下,就不会在走到后面的路劲判断true和false的情况了,这时棋盘都满了,则是找到了合法解,在最后的部分就return true;;;;

;;;;;;

标签:

每日一题——37.解数独由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“每日一题——37.解数独