数独C++代码实现

news2024/11/25 10:25:24

数独是源自18世纪瑞士的一种数学游戏。中文中“数独”一次,实际上是源自于日语对于数独的音译。是一种运用纸、笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复。
一个标准的9x9数独如下所示(当然还可以有更复杂的变体)

你需要根据上述规则将其填满

对于人类来说最容易的方法是排除法,但如果让我用程序去解决的话最容易想到使用回溯法。

问题定义:我们使用9x9的二维vector装载数据,原始数据中有数字的填数字,没有的填'.'(或者其他)。我们使用char类型存储,因为我们其实只需要十个值。我们的目标就是将'.'全部变成数字,并且符合数独的游戏规则。

bool backtracking(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++) {     // (i, j) 这个位置放k是否合适
                if (isValid(i, j, k, board)) {             // 是否有某行或者某列或者小宫格中有重复数字
                    board[i][j] = k;                        // 如果有效则放置k
                    if (backtracking(board)) return true; // 递归填下个数字,只有当最后一个数字都合适的时候才会返回true,否则返回false。
                    board[i][j] = '.';                       // 不合适则撤销k
                }
            }
            return false;                                   // 9个数都试完了,都不行,那么就返回false
        }
    }
    return true; // 遍历完没有返回false,说明找到了合适棋盘位置了
}
bool isValid(int row, int col, char val, vector<vector<char>>& board) {
    for (int i = 0; i < 9; i++) {    // 判断行里是否重复
        if (board[row][i] == val) {
            return false;
        }
    }
    for (int j = 0; j < 9; j++) {    // 判断列里是否重复
        if (board[j][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;
}

转载请标明出处,原文地址:鄙人张钊_有何贵干_物联网,C/C++,深度学习-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 75.颜色分类

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 题意很清楚&#xff0c;让0,1,2按照顺序排好&#xff0c;但是不能使用sort库函数。 将数组分为四部分&#xff0c;分别是&#xff1a; // [0,left] 0 // [left,i] 1 // [i,right] 未…

华为数通方向HCIP-DataCom H12-831题库(单选题:161-180)

第161题 某台路由器Router LSA如图所示,下列说法中错误的是? A、本路由器已建立邻接关系 B、本路由器为DR C、本路由支持外部路由引入 D、本路由器的Router ID为10.0.12.1 答案: B 解析: 一类LSA的在transnet网络中link id值为DR的route id ,但Link id的地址不是10.0.12.…

Unity之NetCode多人网络游戏联机对战教程(4)--连接申请ConnectionApproval

文章目录 前言适用场景1. 准备2.新建GameManager3.编译运行4.脚本详解后话 前言 没看过前面的教程请先阅读前面的教程&#xff0c;本期将会讲到Netcode联机的申请&#xff0c;当一个Client想连接进来&#xff0c;应向Server发送申请联机的信息&#xff0c;然后由服务端向客户端…

EasyExcel的源码流程(导入Excel)

1. 入口 2. EasyExcel类继承了EasyExcelFactory类&#xff0c;EasyExcel自动拥有EasyExcelFactory父类的所有方法&#xff0c;如read()&#xff0c;readSheet()&#xff0c;write()&#xff0c;writerSheet()等等。 3. 进入.read()方法&#xff0c;需要传入三个参数(文件路径…

免杀对抗-C#+go语言-混淆+防反编译+分离

C#&NET-ShellCode-生成/上线 一、生成&#xff1a; 1.msf生成C#语言的shellcode 命令&#xff1a;msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST192.168.206.192 LPORT4444 -e x86/shikata_ga_nai -i 15 -f csharp 二、上线&#xff1a; 1.c#语言shellcode加载代…

如何通过PreMaint设备管理提高制药行业的质量控制和合规性

在制药行业&#xff0c;确保产品的质量和合规性是至关重要的。制药企业必须严格遵守各种法规&#xff0c;以满足患者的需求并确保他们的产品安全有效。为了达到这些目标&#xff0c;制药企业越来越倾向于采用现代化的设备管理系统&#xff0c;如PreMaint。本文将探讨如何通过Pr…

ElementUI之动态树及书籍的分页查询

目录 一.前言 二.Element之动态树 2.1 后台 2.2 前台 三. 动态表格--书籍的分页查询 一.前言 本文章是继上篇的案例之上教大家如何使用ElementUI去实现动态树和书籍的分页查询&#xff0c;如果有不懂的大家可以翻看上篇的博客查看&#xff0c;其中的样式是ElementUI的官网提…

任正非:天空足够大,世界会越来越兴盛

近日&#xff0c;华为公司创始人任正非与南开大学新闻与传播学院院长、科技日报原总编辑刘亚东今年7月7日在深圳一间咖啡厅的对话最新曝光。 在对话过程中&#xff0c;任正非以“拉法尔喷管”来描述华为的研发体系: “喇叭口”吸收宇宙能量&#xff0c;经过理论研究&#xff0…

JetBrains常用插件

Codota AI Autocomplete Java and JavaScript&#xff1a;自动补全插件 Background Image plus&#xff1a;背景图片设置 rainbow brackets&#xff1a;彩虹括号&#xff0c;便于识别 CodeGlance2&#xff1a; 类似于 Sublime 中的代码缩略图&#xff08;代码小地图&#xff…

中睿天下荣获2023全国智能驾驶测试赛车联网安全比赛第一名

9月24日&#xff0c;由工业和信息化部、公安部、交通运输部、中国科学技术协会、北京市人民政府共同主办的2023世界智能网联汽车大会展览会在北京闭幕。同期举行的全国智能驾驶测试赛&#xff08;京津冀赛区&#xff09;宣布比赛结果&#xff0c;中睿天下凭借过硬的产品实力&am…

Elasticsearch实现全文搜索的步骤和实现原理

Elasticsearch实现全文搜索的步骤和实现原理 ElasticSearch是什么springboot项目,如何接入 ElasticSearch实现全文搜索?Elasticsearch实现全文搜索的原理是什么?ElasticSearch是什么 ElasticSearch(简称为ES)是一个基于开源的分布式搜索和分析引擎,它提供了强大的全文搜…

excell导入十万数据慢该如何解决

1.遇到的问题 项目中遇到导入6w条数据&#xff0c;之前用的poi&#xff0c;感觉很慢&#xff0c;这时查询了下阿里巴巴提供了开源的easyExcell很好用。 EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 2.读写速度 64M内存20秒读取75M(46W行25列)的Excel&#x…

Morph:利用AI+无代码,分析整理数据,让数据分析变得更加简单

简介 Morph 是一款一体化的数据工作室&#xff0c;可以让用户实时协作处理数据任务&#xff0c;并提供 AI 辅助来收集、排序和分析数据。它设计用来处理数百万条记录&#xff0c;并且为开发者提供强大的 API 支持。Morph 旨在让每个人都能够通过一个简单的界面轻松地收集、存储…

Vue中动态树形菜单,以及

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…

根据文章段落内容自动插入图片php版

每篇内容根据段落判断插入图片代码附上&#xff1a; $chatd"<table>";if(stripos($content,$chatd)0){//随机输出三张图功能if($moduleid!37 &&$thumb){//判断是否存在图$idrand(1,999999);$midrand(1,9999999);$getimg"http://www.nongpin88.co…

进程管理--进程创建

标记进程 PID: 进程/线程ID 一个唯一的进程标识符&#xff08;PID&#xff09;来标识进程&#xff0c;PID存放在进程描述符的pid字段中。PID顺序编号&#xff0c;新创建进程的PID通常是上一个进程PID1 TGID&#xff1a;进程ID/线程组ID 一个进程中的所有线程共享相同的tgid…

【漏洞复现】Jeecg-Boot SQL注入漏洞(CVE-2023-34659)

漏洞描述 jeecgBoot是一款基于BPM的低代码平台!前后端分离架构 SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发!JeecgBoot引领新低代码开发模式 OnlineCoding-> 代码生…

c语言练习66:模拟实现offsetof

模拟实现offsetof #define offsetof(StructType, MemberName) (size_t)&(((StructType *)0)->MemberName) StructType是结构体类型名&#xff0c;MemberName是成员名。具体操作方法是&#xff1a; 1、先将0转换为一个结构体类型的指针&#xff0c;相当于某个结构体的首…

「康达新材」借力CRM掀起业务升级、组织数字化转型新篇章

近日&#xff0c;康达新材料&#xff08;集团&#xff09;股份有限公司&#xff08;下文简称&#xff1a;康达新材&#xff09;与纷享销客举行CRM平台项目启动仪式。 启动会上&#xff0c;康达新材董事长王建祥表达了对信息化、数据化建设的需求&#xff0c;并期待以此次合作为…

雷柏mv20鼠标使用体验

用了1年多&#xff0c;第一次用竖着的鼠标&#xff0c;现在已经很习惯了&#xff0c;感觉还不错。说说使用感受&#xff1a; 1、 仍然是长时间使用鼠标&#xff0c;但是很少出现手腕痛的情况&#xff0c;确实是有一定效果的。 2、使用场景是有限制的&#xff0c;我是配合笔记…