网站右侧分享插件,制作一个私人网站怎么申请域名,郑州教育培训机构网站建设,wordpress 搭建查询编写一个程序#xff0c;通过填充空格来解决数独问题。 
数独的解法需 遵循如下规则#xff1a; 
数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。#xff08;请参考示例图#xff09; 
数独部分空…编写一个程序通过填充空格来解决数独问题。 
数独的解法需 遵循如下规则 
数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。请参考示例图 
数独部分空格内已填入了数字空白格用 . 表示。 
示例 1 输入board  [[5,3,.,.,7,.,.,.,.],[6,.,.,1,9,5,.,.,.],[.,9,8,.,.,.,.,6,.],[8,.,.,.,6,.,.,.,3],[4,.,.,8,.,3,.,.,1],[7,.,.,.,2,.,.,.,6],[.,6,.,.,.,.,2,8,.],[.,.,.,4,1,9,.,.,5],[.,.,.,.,8,.,.,7,9]]
输出[[5,3,4,6,7,8,9,1,2],[6,7,2,1,9,5,3,4,8],[1,9,8,3,4,2,5,6,7],[8,5,9,7,6,1,4,2,3],[4,2,6,8,5,3,7,9,1],[7,1,3,9,2,4,8,5,6],[9,6,1,5,3,7,2,8,4],[2,8,7,4,1,9,6,3,5],[3,4,5,2,8,6,1,7,9]]
解释输入的数独如上图所示唯一有效的解决方案如下所示 class Solution {
public:bool isValid(int row,int col,char val,vectorvectorchar board) {for(int j0;j9;j) { // 判断这一行里是否重复if(board[row][j]  val) return false;}for(int i0;i9;i) { // 判断这一列里是否重复if(board[i][col]  val) return false;}int startRow  (row / 3) * 3;int startCol  (col / 3) * 3;for (int i  startRow; i  startRow  3; i) { // 判断9方格里是否重复for (int j  startCol; j  startCol  3; j) {if (board[i][j]  val ) {return false;}}}return true;}bool backtracking(vectorvectorchar board) {for (int i  0; i  board.size(); i) {        // 遍历行for (int j  0; j  board[0].size(); j) { // 遍历列if (board[i][j]  .) {for (char k  1; k  9; k) {     // (i, j) 这个位置放k是否合适if (isValid(i, j, k, board)) {board[i][j]  k;                // 放置kif (backtracking(board)) return true; // 如果找到合适一组立刻返回board[i][j]  .;              // 回溯撤销k}}return false;  // 9个数都试完了都不行那么就返回false}}}return true; // 遍历完没有返回false说明找到了合适棋盘位置了}void solveSudoku(vectorvectorchar board) {backtracking(board);}
}; 
参考和推荐文章、视频 
回溯算法二维递归解数独不过如此| LeetCode37. 解数独-代码随想录-代码随想录-哔哩哔哩视频 (bilibili.com)https://www.bilibili.com/list/525438321?tid0sort_fieldpubtimespm_id_from333.999.0.0oid944861498bvidBV1TW4y1471V代码随想录 (programmercarl.com)https://www.programmercarl.com/0037.%E8%A7%A3%E6%95%B0%E7%8B%AC.html#%E6%80%9D%E8%B7%AF