class Solution { public: vector> spaces; bool row[9][9],col[9][9],degree[3][3][9]; int len; void solveSudoku(vector>& board) { memset(row,0,sizeof(row)); memset(col,0,sizeof(col)); memset(degree,0,sizeof(degree)); for(int i=0;i<9;i++){ for(int j=0;j<9;j++){ if(board[i][j]>='1'&&board[i][j]<='9'){ int a=board[i][j]-'0'; row[i][a-1]=col[j][a-1]=degree[i/3][j/3][a-1]=true; } else{ spaces.push_back(make_pair(i,j)); } } } len=spaces.size(); dfs(0,board); return; } bool check(int a,int b,int k){ if(row[a][k]||col[b][k]||degree[a/3][b/3][k]){ return false; } return true; } bool dfs(int start,vector> board){ if(start==len){ return true; } int x=spaces[start].first,y=spaces[start].second; for(int i=1;i<=9;i++){ if(check(x,y,i-1)){ row[x][i-1]=col[y][i-1]=degree[x/3][y/3][i-1]=true; board[x][y]=i+'0'; if(dfs(start+1,board)) return true; row[x][i-1]=col[y][i-1]=degree[x/3][y/3][i-1]=false; } } return false; } };
2条回答 默认 最新
报告相同问题?
提交
相关推荐 更多相似问题
- 2018-05-01 15:55回答 1 已采纳 ``` #include #include #include #include using namespace std; int n,c,a[10000],b
- 回答 1 已采纳 https://blog.csdn.net/wind__chaser/article/details/91386065
- 2019-11-12 12:29回答 2 已采纳 讲个思路: 由于集合为任意列的组合,总共20列,所以用二进制位来表示比较方便计算。可以用32位整数来表示一个集合。 题设的条件,从一个角度来理解,即每行或者A或者B,必须有一个全0的列组成的集合;
- 2022-02-01 23:05╰つ栺尖篴夢ゞ的博客 编写一个程序,通过填充空格来解决数独问题。 数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次; 数字 1-9 在每一列只能出现一次; 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次; ...
- 2021-05-20 12:11百通社的博客 回溯法的应用(实验报告) (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!11.9 积分华南师范大学本科生实验报告姓名_张俊发_学号20082101032院系_计算机学院_专业...
- 2021-01-08 23:48code_kd的博客 说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题…… 第一次遇到它的时候应该是大一下或者大二这个期间,这个时间对啥都懵懵懂懂,啥都想学却...
- 2022-05-19 16:11回答 1 已采纳 代码格式较乱,不过猜测问题出在x = y这里,列表的浅拷贝,两个变量指向了同一个列表地址。所以后面执行到y[k] = 0的时候,即使没有再赋值,x也会变成和y一样全0的列表。
- 2018-11-11 06:09回答 1 已采纳 https://blog.csdn.net/hnust_xiehonghao/article/details/7911575
- 2022-05-13 10:51回答 1 已采纳 int StrIndex(SString T,int pos,SString S)//模式匹配 { //求从主串T的下标pos起,串S第一次出现的位置,成功返回位置序号,不成功返回-1
- 2020-12-12 19:30吴师兄学算法的博客 点击上方“五分钟学算法”,选择“星标”公众号重磅干货,第一时间送达前言说起八皇后问题,它是一道回溯算法类的经典问题,也可能是我们大部分人在上数据结构或者算法课上遇到过的最难的一道题……在...
- 2022-01-05 17:18sunny-墨光的博客 我们可以很方便的进行元编程(Meta-Programming),通过写代码来动态生成代码再编译,从而对程序加速,有时可以接近C语言的速度。
- 2021-08-03 11:06禅与计算机程序设计艺术的博客 24点游戏编程问题问题描述你有 4 张写有 1 到 9 数字的牌。你需要判断是否能通过*,/,+,-,(,)的运算得到 24。示例 1:输入: [4, 1, 8, 7]输出: True解释: (8-4) * (7-1) = 24示例 2:输入: [1, 2, 1, 2]输出: ...
- 2016-12-30 12:30回答 1 已采纳 犯了低级错误,计算在交换之前
- 2021-11-30 15:26回答 2 已采纳 第20行传入startindex+1时应该传入i+1,下一个递归的起点是i + 1,这样就不会重复了
- 2018-04-21 10:19回答 2 已采纳 return Math.max(getSValue(index - 1, totalWeight - w[index]) + v[index], getSValue(index - 1, resiWe
- 2021-05-21 16:26BYFamily的博客 接上一节图论算法原理和实现,本节讨论六大...首先它是直接面向实际问题的,当使用基本的一些数据结构和算法无法解决的时候,那么就要考虑这六大算法设计技巧了,所以,和一般的数据结构和算法并没有什么不同。而...
- 2020-01-01 21:47liweiwei1419的博客 首先解释“回溯”算法的应用,“回溯”算法主要用于搜索,因此有时候“回溯算法”也叫“回溯搜索”。这里“搜索”的意思即“查找我们所需要的解...下面我们通过一个非常经典的问题,介绍“回溯”算法在查找问题的解...
- 2019-06-14 15:56liuchang_lc的博客 递归函数与回溯法 什么叫递归函数:编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。 举例说明: #include <stdio.h> void compute_sum(int i,...
- 2019-01-01 10:07回答 1 已采纳 https://www.cnblogs.com/hua-dong/p/9667451.html
- 2022-01-21 16:13Lee000506的博客 它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 一般来说,递归需要有边界条件、递归...
- 没有解决我的问题, 去提问