解数独c++

article/2025/10/2 2:58:40

解数独

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

在这里插入图片描述

#include<iostream>
#include<vector>
using namespace std;
class Solution
{ 
public:vector<vector<bool>>line;//记录数字是否在当前行出现过vector<vector<bool>>cloumn;//记录数字是否在当前列出现过vector<vector<vector<bool>>>block;//记录数字是否在当前块出现过vector<pair<int, int>>spaces;//记录空格的位置,输入时以"."代替空格,即记录"."出现的位置bool valid = false;//记录是否已经遍历完所有空格void solveSoduku(vector<vector<char>>& input){line.resize(9, vector<bool>(9, false));cloumn.resize(9, vector<bool>(9, false));block.resize(9, vector<vector<bool>>(9, vector<bool>(9, false)));            //遍历数独         int n = 9;for(int i = 0; i < 9; i++){for (int j = 0; j < 9; j++){//搜索空格,记录空格的位置if (input[i][j] == '.')spaces.emplace_back(i, j);else{int digit = input[i][j] - '0' - 1;line[i][digit] = true;cloumn[j][digit] = true;block[i / 3][j / 3][digit] = true;}}}dfs(input, 0);}void dfs(vector<vector<char>>& input, int pos)//pos 为开始位置{      //终止条件if (pos == spaces.size()){valid = true;return;}//找到空格,填补空格,修改空格的bool值,路走不通就回溯         int i = spaces[pos].first;int j = spaces[pos].second;for (int digit = 0; digit < 9&&!valid; digit++){                      if (!line[i][digit] && !cloumn[j][digit] && !block[i / 3][j / 3][digit]){input[i][j] = digit + '0' + 1;line[i][digit] = true;cloumn[j][digit] = true;block[i / 3][j / 3][digit] = true;dfs(input, pos + 1);//回溯line[i][digit] = cloumn[j][digit] = block[i / 3][j / 3][digit] = false;}}}void print(vector<vector<char>>const input){for (auto x : input){cout << "------------------------------------" << endl;for (auto y : x){y == '.' ? cout << "  " : cout << " " << y;cout << " |";}cout << endl;}cout << "------------------------------------" << endl;}
};
int main()
{       vector<vector<char>>input= {{'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'}};  Solution solution;solution.print(input);solution.solveSoduku(input);cout << "解数独如下:" << endl;solution.print(input);cout << endl;return 0;
}

运行结果:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/INouIr66.shtml

相关文章

MATLAB 解数独

数独是一种较为常见的游戏&#xff0c;一般有4乘4、6乘6、9乘9几种&#xff0c;就像下面这种&#xff0c;本文也是主要求解此类数独。 此外还有一些奇形怪状的&#xff0c;如下图两种&#xff0c;均是不规则的&#xff0c;在此并不会涉及&#xff0c;但会在以后发布代码以及过程…

Leetcode 解数独

解数独 题目描述&#xff1a; 编写一个程序&#xff0c;通过填充空格来解决数独问题。一个数独的解法需遵循如下规则&#xff1a;数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。提示&#xff1a;…

再战leetcode (解数独)

37. 解数独 题目描述 回溯法 leetcode题解 代码 public class Test {public static void main(String[] args) {char[][] board {{5, 3, ., ., 7, ., ., ., .},{6, ., ., 1, 9, 5, ., ., .},{., 9, 8, ., ., ., ., 6, .},{8, ., ., ., 6, ., ., ., 3},{4, ., ., 8, ., 3, .…

回溯算法解数独问题(java版)

下面来详细讲一下如何用回溯算法来解数独问题。 下图是一个数独题&#xff0c;也是号称世界上最难的数独。当然了&#xff0c;对于计算机程序来说&#xff0c;只要算法是对的&#xff0c;难不难就不知道了&#xff0c;反正计算机又不累。回溯算法基本上就是穷举&#xff0c;解这…

014. 解数独

1.题目链接&#xff1a; 37. 解数独 2.解题思路&#xff1a; 2.1.题目要求&#xff1a; 暂时的理解就是&#xff0c;编写一个程序然后自动填完数独&#xff0c;填完返回&#xff08;不用求解各种不同的数独组合&#xff09; 填的时候&#xff0c;数字要满足的规则&#xff1…

回溯算法—解数独

什么是回溯法&#xff1f; 回溯法&#xff08;探索与回溯法&#xff09;是一种选优搜索法&#xff0c;又称为试探法&#xff0c;按选优条件向前搜索&#xff0c;以达到目标。但当探索到某一步时&#xff0c;发现原先选择并不优或达不到目标&#xff0c;就退回一步重新选择&…

解数独--难的一批

1题目 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 数…

解数独 — Python

文章目录 解数独1、程序简介示例&#xff1a;输入&#xff1a;输出&#xff1a;解释&#xff1a;提示&#xff1a; 2、程序代码3、运行结果 解数独 1、程序简介 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每…

【每日刷题】解数独

题目地址 https://leetcode-cn.com/problems/sudoku-solver/ 题目描述&#xff1a;解数独 编写一个程序&#xff0c;通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-…

算法学习:37. 解数独

解数独 题目链接&#xff1a;力扣题目链接 难度&#xff1a;困难 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫…

数独解题方法大全

数独这个数字解谜游戏&#xff0c;完全不必要用到算术&#xff01;会用到的只是推理与逻辑。解题方法分两大类&#xff1a;直观法和候选数法。 直观法就是不需要任何辅助工具&#xff0c;从接到数独谜题的那一刻起就可以立即开始解题。绝不猜测。数独直观法解题技巧主要有&…

37.解数独

37. 解数独&#xff08;难度&#xff1a;困难&#xff09; 题目链接&#xff1a;https://leetcode-cn.com/problems/sudoku-solver/ 编写一个程序&#xff0c;通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数…

安装搜狗输入法成功,每次都折腾,记录一下这次的成功经验。

1&#xff1a;卸载fcitx sudo apt-get --purge fcitx* 2&#xff1a;清理系统内的无用的软件包 sudo apt-get --purge autoremove 3&#xff1a;到搜狗官网下载搜狗拼音输入法&#xff0c;选择你系统对应的软件包&#xff0c;我系统是64位的&#xff0c;所以我选择了amd64的 ht…

Ubuntu16.04 python2.7升级python3.5

原文地址&#xff1a;https://www.cnblogs.com/wmr95/p/7637077.html Ubuntu16.04 python2.7升级python3.5 正常情况下&#xff0c;你安装好ubuntu16.04版本之后&#xff0c;系统会自带 python2.7版本&#xff0c;如果需要下载新版本的python3.5&#xff0c;就需要进行更新。下…

(转)解决Ubuntu2.6.31-20内核更新问题:Unable to mount root fs on unknown-block(x,x)

原文章&#xff1a;http://hi.baidu.com/%D2%BB%B5%E3%C7%E7/blog/item/d3b0df30da10a115ebc4afa3.html Ubuntu2.6.31-20内核更新问题&#xff1a;Unable to mount root fs on unknown-block(x,x) WUBI装的ubuntu。在更新了最信的内核 2.6.31-20&#xff0c;启动时出现提示&a…

Git客户端的简单使用(注册-gt;应用)

参考文档&#xff1a; Ubuntu下git安装与使用&#xff1a;https://jingyan.baidu.com/article/dca1fa6f43c965f1a540524d.html Ubuntu下使用SSH KEY&#xff1a;https://jingyan.baidu.com/article/5bbb5a1bff545613eba17915.html 1. 通过apt源安装git命令行工具 这里不建…

windows10下的Ubuntu18.04的双系统的安装

windows下装Ubuntu18.04的双系统作为菜鸟&#xff0c;照着大神们的教程装了几遍&#xff0c;给大家分享一下流程。&#xff08;默认装好Windows10&#xff09; 1.【Win10上安装的软件】可在Win10上提前下载安装EasyBCD软件&#xff0c;用于之后开机时的双系统切换&#xff1b;…

[Linux 基础] -- Linux DRM (二) 基本概念和特性 - Rockchip

一、楔子 上篇文章中我们有讲过 DRM 是 Linux 下的图形渲染架构&#xff0c;用来管理显示输出、图层合成与更新、内存管理、分辨率设置等等功能的一套显示管理框架。应用程序可以直接操纵 drm 的 ioctl 或者是用 framebuffer 提供的接口进行显示相关操作。后来大家觉得这样太 …

ubuntu mysql5.7配置_MySQL5.7在Ubuntu上的安装、配置与使用

环境&#xff1a;html Ubuntu 1804 64位 python 待安装&#xff1a;MySQL5.7版本mysql 1、安装 一、下载mysql-apt的配置包&#xff0c;并安装 或者下载社区版本mysql5.7 https://www.cnblogs.com/metianzing/p/9050204.html sql 在安装的过程当中&#xff0c;会要求选择mysql版…

master节点怎么安装mysql软件_Windows下搭建MySQL Master Slave

转&#xff1a;http://www.cnblogs.com/gaizai/p/3248207.html http://www.cnblogs.com/gaizai/archive/2013/03/15/2961868.html MySQL表数据迁移自动化 http://www.cnblogs.com/gaizai/archive/2012/10/23/2735556.html Ubuntu10下MySQL搭建Master Slave 一、背景 服务器上…