1. 解数独
    编写一个程序,通过已填充的空格来解决数独问题。

一个数独的解法需遵循如下规则:

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
空白格用 ‘.’ 表示。

一个数独。

答案被标成红色。

Note:

给定的数独序列只包含数字 1-9 和字符 ‘.’ 。
你可以假设给定的数独只有唯一解。
给定数独永远是 9x9 形式的。

执行用时:4 ms, 在所有 C++ 提交中击败了92.04%的用户
内存消耗:6.7 MB, 在所有 C++ 提交中击败了32.47%的用户

初版代码:

class Solution {private://遍历行bool line[9][9];//遍历列bool column[9][9];//遍历每个小块bool block[3][3][9];bool valid;vector<pair<int, int>> spaces;public:bool dfs(vector<vector<char>>& board, int pos) {int i;bool flag = false;//获取空白点的坐标int pair_left = spaces[pos].first;int pair_right = spaces[pos].second;pos++;//如果还有空白点没有填充//但递归结束时 在向下递归一层 触发回归机制if (spaces.size() > pos-1) {//填充点数了for (i = 0; i < 9; i++) {//查看是否有点满足条件 有就进入下一下递归 否则就返回重新递归if (!line[pair_left][i] && !column[pair_right][i] && !block[pair_left / 3][pair_right / 3][i]) {//此时说明可以填充点数line[pair_left][i] = column[pair_right][i] = block[pair_left / 3][pair_right / 3][i] = true;//填充点数board[pair_left][pair_right] = char(i + 1) + '0';//如果返回true则继续返回 —— 递归结束if (dfs(board, pos))return true;//回溯说明安置失败 而且位置需要放在这里line[pair_left][i] = column[pair_right][i] = block[pair_left / 3][pair_right / 3][i] = false;}}//到这里说明不可放置点数了return false;}//如果没有需要处理的空白点 则递归结束了else {valid = true;return true;}}void solveSudoku(vector<vector<char>>& board) {memset(line, false, sizeof(line));memset(column, false, sizeof(column));memset(block, false, sizeof(block));valid = false;//已经填充数字的地方需要设置为truefor (int i = 0; i < 9; ++i) {for (int j = 0; j < 9; ++j) {if (board[i][j] == '.') {//保存空白点spaces.emplace_back(i, j);}else {int digit = board[i][j] - '0' - 1;//这里不是真实的值 便于line等数组处理罢了//这里的block数组设置的很巧妙!!!通过将每一个小块压缩成 建立了巧妙的映射关系line[i][digit] = column[j][digit] = block[i / 3][j / 3][digit] = true;}}}dfs(board, 0);}
};

C++ 解9*9数独 LeetCode37题相关推荐

  1. “论解不了数独所以选择做个数独游戏这件事”

    有一天,小明同学在津津有味的逛力扣网站的时候,惊喜的发现了一个看似非常好下手的题目(万恶之源 T T). 于是小明同学又津津有味的写了解题思路. 像往常一样打开了Unity准备开始做. .(画UI) ...

  2. python回溯法解9*9数独

    文章目录 前言 一.回溯法解数独代码 总结 前言 看了labuladong算法小抄里的回溯法,照着模板,加入自己的理解,用python做了个解9*9数独的回溯法,. 一.回溯法解数独代码 直接上代码: ...

  3. python解初中题_用python解一道数独小题

    个人的第一篇博文,还请多多支持,不当之处,还请多多指教.(以后有精力还会写更多的文章) 本人是一名大一狗,目前为止学了半年python,对python也就有一点点的了解,没事爱编写一些小程序玩,不过都 ...

  4. 用gulp计算合金弹性常数_考研结构力学 用3种方法解东南大学位移法大题

    位移法中含无穷刚度杆的结构是考研结构力学的一大难点,很多热门院校都喜欢出这类型的题目,下面以两道有复杂牵连位移的含无穷刚度杆位移法题目为例,对三种解法进行讲解,题目取自东南大学真题和烟台大学真题. 1 ...

  5. 解9*9数独算法(C++)

    什么是数独 数独(shù dú)是源自18世纪瑞士的一种数学游戏.是一种运用纸.笔进行演算的逻辑游戏.已知有9行9列的格子,且被分成9个3*3的方块.其中一些格子内有数字,数值的范围为1-9 .玩家需 ...

  6. C语言学习笔记—P13(操作符详解<1>+图解+题例)

    目录 前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教! --By 作者:新晓·故知 操作符详解<1>:​ 题例: 1. 操作符分类: 算术操作符 移位操作 ...

  7. 用Python解“爬动的蠕虫”题

    7-17 爬动的蠕虫 一条蠕虫长1寸,在一口深为N寸的井的底部.已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬.在休息的过程中,蠕虫又下滑了D寸.就这样,上爬和下滑重复进行.请问,蠕虫 ...

  8. 用C语言解“爬动的蠕虫”题

    7-17 爬动的蠕虫 一条蠕虫长1寸,在一口深为N寸的井的底部.已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬.在休息的过程中,蠕虫又下滑了D寸.就这样,上爬和下滑重复进行.请问,蠕虫 ...

  9. 详解单链表经典OJ题

    文章目录 前言 一 删除链表中等于给定值"val"的所有节点 二 反转一个单链表 三 求中间节点 四 链表倒数第K个节点 五 合并有序链表 六 链表分割 注意细节: 七 删除重复结 ...

最新文章

  1. odoo API装饰器one、model、multi的区别
  2. axis2常用命令(wsdl2java)
  3. go语言 sync.map遍历时删除可以全部删除
  4. 《Python Cookbook 3rd》笔记(5.13):读写压缩文件
  5. 使用CNN进行情感分类
  6. (DFS)n皇后问题
  7. 面试官:Spring代理目标bean时为何通过TargetSource类型对目标bean封装?
  8. 台式电脑桌面没有计算机,台式电脑开机后屏幕没显示怎么解决?
  9. 自定义应用程序配置文件(app.config)
  10. 【PHP代码审计】RIPS代码审计工具
  11. 嘉兴学院c语言期末考试题库,液压与气压传动(嘉兴学院)知到APP答案
  12. 谈谈AVG游戏的Android移植(NScripter与吉里吉里)
  13. 苹果手机怎么在照片上添加文字_手机照片如何添加文字?原来方法这么简单,手把手教你学会。...
  14. 人工智能/虚拟现实技术的工程伦理分析:以电影《头号玩家》为例
  15. 圣诞音乐贺卡beepMusic_v6d;--铃儿响叮当;
  16. 读书百客:《相思》鉴赏
  17. js插件--1.swal
  18. 王牌竞速安装后显示服务器维护,王牌竞速怎么修车 王牌竞速怎么维修车 王牌竞速的车怎么维护...
  19. Android Aop预研
  20. C语言试题164之求定积分

热门文章

  1. 帆软内置数据集实现决策报表联动
  2. qt快速读取excel
  3. Give up sending metadata request since no node is available
  4. 若依移动端Ruoyi-App——开发总结
  5. EXCEL填入数据,自动出现当天日期
  6. Leetcode 算法面试冲刺 热题 HOT 100 刷题(406 416 437 438 448)(六十九)
  7. 如何统计PHP程序的运行时间、耗费内存
  8. 智能扫地机器人哪个品牌好?最受欢迎排行榜前十名
  9. 盘点5月份GitHub上最热门的开源项目
  10. 关于笔记本电脑Linux下耳机电流噪声--已解决