数独游戏(dfs)

在这里插入图片描述

代码注释如下
#include <iostream>
using namespace std;
const int N = 10;
bool col[N][N], rol[N][N], cell[3][3][N];
char g[N][N];
bool dfs(int x, int y) {    //用bool这样在找到一个方案就可以迅速退出if(y == 9)  x++, y = 0;     //若y超出边界,则第二行开始y = 0,x++if(x == 9)  {for(int i = 0; i < 9; i++) cout << g[i] << endl;return true;//这里返回true让下面for里面中间的dfs直接结束,不在回溯,少枚举很多情况//并且是输出唯一解}if(g[x][y] != '.')  return dfs(x, y + 1);//g[x][y] == '.'for(int i = 0; i < 9; i++) {if(!col[y][i] && !rol[x][i] && !cell[x / 3][y / 3][i]) {g[x][y] = i + '1';col[y][i] = rol[x][i] = cell[x / 3][y / 3][i] = true;if(dfs(x, y + 1))   return true;//剪枝,dfs返回值是true上面输出了答案,不用再回溯,并且//这一枝递归直接结束。//恢复操作g[x][y] = '.';col[y][i] = rol[x][i] = cell[x / 3][y / 3][i] = false;}}return false;//如果某个方案失败,需要返回false让上面回溯//不加这个也不会输出结果,因为如果这一枝递归没成功,返回false上面才能回溯
}
int main() {for(int i = 0; i < 9; i++) {     cin >> g[i];for(int j = 0; j < 9; j++) {if(g[i][j] != '.') {int x = g[i][j] - '1';  //1-9映射到0-8(方便cell的下取整操作)rol[i][x] = true;col[j][x] = true;cell[i / 3][j / 3][x] = true;}}   }dfs(0, 0);return 0;
}

补充

//这样写也是对的,只不过没有剪枝,时间复杂度高些
bool dfs(int x, int y)
{if (y == 9) x ++, y = 0;if (x == 9){for (int i = 0; i < 9; i ++ ) cout << g[i] << endl;return true;}if (g[x][y] != '.') return dfs(x, y + 1);for (int i = 0; i < 9; i ++ )if (!row[x][i] && !col[y][i] && !cell[x / 3][y / 3][i]){g[x][y] = i + '1';row[x][i] = col[y][i] = cell[x / 3][y / 3][i] = true;dfs(x, y + 1);//不同点row[x][i] = col[y][i] = cell[x / 3][y / 3][i] = false;g[x][y] = '.';}//没有返回值
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯-单片机组基础5——外部中断与LED的控制(附小蜜蜂课程代码)

蓝桥杯单片机组备赛指南请查看这篇文章&#xff1a;戳此跳转蓝桥杯备赛指南文章 本文章针对蓝桥杯-单片机组比赛开发板所写&#xff0c;代码可直接在比赛开发板上使用。 型号&#xff1a;国信天长4T开发板&#xff08;绿板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K6…

KubeSphere平台安装系列之二【Linux单节点部署KubeSphere】(2/3)

**《KubeSphere平台安装系列》** 【Kubernetes上安装KubeSphere&#xff08;亲测–实操完整版&#xff09;】&#xff08;1/3&#xff09; 【Linux单节点部署KubeSphere】&#xff08;2/3&#xff09; 【Linux多节点部署KubeSphere】&#xff08;3/3&#xff09; **《KubeS…

linux系统Jenkins工具配置webhook自动部署

Jenkins工具webhook自动部署 webhook自动部署webhook的意义操作流程jenkins页面操作gitlab页面操作 webhook自动部署 webhook的意义 自动化部署&#xff1a;Webhook 可以在代码提交、合并请求或其他特定事件发生时自动触发 Jenkins 构建和部署任务&#xff0c;从而实现自动化…

shell自定义日志输出函数log

Background 在编写比较复杂的脚本时&#xff0c;需要输出相关日志信息&#xff0c;方便知悉脚本的执行情况以及问题的排查。 源码 log.sh # 自定义日志函数 function log(){if [[ $1 "i" || $1 "info" ]]; thenecho -ne "\033[1;34mINFO: \033[0m&…

爬虫入门到精通_实战篇8(分析Ajax请求并抓取今日头条美食美图)_界面上抓取Ajax方式

1 目标 目标&#xff1a; 抓取今日头条美食美图&#xff0c;如下&#xff1a; 一些网页直接请求得到的HTML代码并没有在网页中看到的内容&#xff0c;因为一些信息是通过Ajax加载&#xff0c;并通过js渲染生成的&#xff0c;这时就需要通过分析网页的请求来获取想要爬取的内容…

LeetCode 热题 100 | 图论(二)

目录 1 基础知识 1.1 什么是拓扑排序 1.2 如何进行拓扑排序 1.3 拓扑排序举例 2 207. 课程表 3 210. 课程表 II 菜鸟做题&#xff0c;语言是 C 1 基础知识 1.1 什么是拓扑排序 含义&#xff1a;根据节点之间的依赖关系来生成一个有序的序列。 应用&#xff1a…

智能分析网关V4安全帽检测/反光衣检测/通用工服检测算法及应用

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

Redux 简介

一 Redux 应用场景 随着JavaScript单页应用开发日趋复杂&#xff0c;管理不断变化的state 非常困难 Redux 的出现就是为了解决state里的数据问题 在React中&#xff0c;数据在组件中是单向流动的 数据从一个方向父组件流向子组件&#xff08;通过props&#xff09;,由于这个特…

【python开发】网络编程(上)

这里写目录标题 一、必备基础&#xff08;一&#xff09;网络架构1、交换机2、路由器3、三层交换机4、小型企业基础网络架构5、家庭网络架构6、互联网 &#xff08;二&#xff09;网络核心词汇1、子网掩码和IP2、DHCP3、内网和公网IP4、云服务器5、端口6、域名 一、必备基础 &…

CCF推荐会议|截稿倒计时 计算机图形学与多媒体领域3-4月份截稿资讯!

会议之眼精心汇总了以下CCF推荐会议之计算机十大领域之一&#xff1a;计算机图形学与多媒体领域&#xff01;2024年度3-4月份会议截稿日期将近&#xff01;会议之眼致力于为科研学者第一时间获取最新学术资讯&#xff01;助力广大学者保持领先优势&#xff01;愿科研人员们在专…

Home Assistant:基于Python的智能家居开源系统详解

Home Assistant&#xff1a;基于Python的智能家居开源系统详解 在数字化和智能化的时代&#xff0c;智能家居系统成为了现代家庭的新宠。它们能够让我们更加方便地控制家中的各种设备&#xff0c;实现自动化和个性化的居住体验。其中&#xff0c;Home Assistant作为一款基于Pyt…

正规的相亲交友软件哪个好?分享目前最可靠的5款相亲APP软件

随着中国单身人数的不断增加&#xff0c;相亲 APP 平台的市场需求增大&#xff0c;相亲 APP 平台的数量也越来越多&#xff0c;下面为你盘点当下热门的五大相亲软件&#xff1a; NO1&#xff1a;丛丛 这是我用的最久的一款脱单交友小程序&#xff0c;我老公就是在这个小程序找到…