算法学习系列(五):N皇后、数独

目录

  • 引言
  • 一、N皇后问题
    • 代码实现
    • 测试
  • 二、数独问题
    • 代码实现
    • 测试

引言

这个N皇后问题是很典型的一个递归问题,就是还是要掌握,所谓递归其实就是dfs,一层一层深入下去。数独和N皇后的思路是一样的,只不过一些细节不同而已。

一、N皇后问题

首先介绍一下八皇后问题,那么N皇后就是N*N个棋盘里,放入N个棋子,要求同行同列同斜线不能有重复的棋子
在这里插入图片描述

代码实现

这个思路就是暴力枚举,从第一行第一列开始,如果满足要求就落棋子,接着进入下一行,如果一直到了第n+1行说明前n行都满足要求,说明符合情况,就次数加一,然后把该情况打印一下。如果该行结束了,那么就回退到上一行中,把之前落得棋子拾起来,然后再判断下一列是否能够放棋子,一直到第一行结束。
跟下图的思想是一样的,唯一不同的是第二行条件不满足的时候,就进入下一列而不进入下一层
在这里插入图片描述

#include<iostream>using namespace std;const int N = 10;
int g[N][N];  //0代表不落棋子,1代表落棋子
int n, cnt;
int dir[3][2] = { -1,-1, -1,0, -1,1 };  //代表方向,分别是左上、上、右上bool check(int row, int col)
{for (int i = 0; i < 3; ++i){int x = row, y = col;while (1){x += dir[i][0];y += dir[i][1];if (x < 0 || x >= n || y < 0 || y >= n) break;if (g[x][y]) return false;}}return true;
}void dfs(int row)
{if (row >= n){cnt++;for (int i = 0; i < n; ++i){for (int j = 0; j < n; ++j){printf("%d ", g[i][j]);}puts("");}puts("");}for (int j = 0; j < n; ++j){if (check(row, j)){g[row][j] = 1;dfs(row + 1);g[row][j] = 0;}}
}int main()
{cin >> n;dfs(0);return 0;
}

测试

输入4可以看出是正确的
在这里插入图片描述
输入10,并把输出信息改为最后输出cnt,所得结果也是正确的
在这里插入图片描述

二、数独问题

9*9的格子里,填充数字1~9,要求同行同列不能重复,同一个田字格也不能重复

代码实现

#include<iostream>using namespace std;int g[9][9] = { 0,0,5,3,0,0,0,0,0,8,0,0,0,0,0,0,2,0,0,7,0,0,1,0,5,0,0,4,0,0,0,0,5,3,0,0,0,1,0,0,7,0,0,0,6,0,0,3,2,0,0,0,8,0,0,6,0,5,0,0,0,0,9,0,0,4,0,0,0,0,3,0,0,0,0,0,0,9,7,0,0 };  //0代表没放 1~9代表放的该数字
int cnt;bool check(int row, int col, int num)
{if (g[row][col]) return false;for (int i = 0, j = col; i < 9; ++i){if (g[i][j] == num) return false;}for (int i = row, j = 0; j < 9; ++j){if (g[i][j] == num) return false;}int x1 = row / 3 * 3, y1 = col / 3 * 3;for (int i = x1; i < x1 + 3; ++i){for (int j = y1; j < y1 + 3; ++j){if (g[i][j] == num) return false;}}return true;
}void dfs(int row, int col)
{if (row >= 9){cnt++;for (int i = 0; i < 9; ++i){for (int j = 0; j < 9; ++j){printf("%d ", g[i][j]);}puts("");}puts("");return;}if (g[row][col] == 0){for (int num = 1; num <= 9; ++num){if (check(row, col, num)){g[row][col] = num;dfs(row + (col + 1) / 9, (col + 1) % 9);g[row][col] = 0;}}}else{dfs(row + (col + 1) / 9, (col + 1) % 9);}
}int main()
{dfs(0,0);//0 1 2   3 4 5   6 7 8return 0;
}

测试

可以看出来是正确的
在这里插入图片描述

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

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

相关文章

TFIDF、BM25、编辑距离、倒排索引

TFIDF TF刻画了词语t对某篇文档的重要性&#xff0c;IDF刻画了词语t对整个文档集的重要性

2024年API安全趋势预测

目录 1.API漏洞的渗透性 2.标准框架的局限性 3.防止漏洞 4.不断上升的威胁和战略建议 案例分析 2024年的潜在威胁 驾驭不断演变的API安全格局 在接下来的部分中&#xff0c;我们将更深入地研究这些趋势&#xff0c;探索标准框架在应对这些新出现的威胁方面的局限性…

数据库学习日常案例20231203-Mysql高级 -- 日志管理篇

Mysql高级 -- 日志篇 *日志类型 1.mysql的6类日志&#xff1a; 2.日志的弊端 *慢查询日志(slow query log) *通用查询日志(general query log) 1.作用&#xff1a; 2.问题场景&#xff1a; 3.查看当前状态 &#xff1a; 4.启动日志&#xff1a; 方式1&#xff1a;永久…

云计算在数字营销中的作用是什么?

营销策略和云计算是一个为企业提供多种优势的系统。它使他们能够取得更大的成功&#xff0c;同时提高产量。这样做的原因是&#xff0c;可以从任何位置远程使用云集成工具和应用程序。基本上&#xff0c;该系统增强了存储设备和传播。同时&#xff0c;它减轻了公司 IT 网络的压…

【Kubernetes】可视化UI界面Dashboard

安装和配置k8s可视化UI界面 一、安装Dashboard1.1、上传镜像并解压1.2、安装dashboard组件1.3、修改service1.4、访问dashboard 二、通过Token令牌访问Dashboard2.1、创建clusterrolebinding2.2、获取token2.3、使用token登录 三、通过kubeconfig文件访问Dashboard3.1、创建clu…

21、pytest参数化中标记单独的测试用例

官方实例 # content of test_expectation_xfail import pytestpytest.mark.parametrize("test_input, expected",[("35",8),("24",6),pytest.param("6*9",42,markspytest.mark.xfail)], ) def test_eval(test_input, expected):asser…

基于ssm vue技术的品牌银饰售卖平台源码和论文737

摘 要 本论文主要是针对品牌银饰售卖而开发进行概述&#xff0c;主要包括对研究的背景和研究现状&#xff0c;以及研究目的等的阐述&#xff0c;也对该系统的各种功能要求&#xff0c;对系统结构&#xff0c;数据库的设计等进行讨论。随着科技与技术的发展&#xff0c;利用计…

Qt篇——QChartView实现鼠标滚轮缩放、鼠标拖拽平移、鼠标双击重置缩放平移、曲线点击显示坐标

话不多说。 第一步&#xff1a;自定义QChartView&#xff0c;直接搬 FirtCurveChartView.h #ifndef FITCURVECHARTVIEW_H #define FITCURVECHARTVIEW_H #include <QtCharts>class FitCurveChartView : public QChartView {Q_OBJECTpublic:FitCurveChartView(QWidget *…

MySQL 8.x 自签证书通过keytool和openssl转成JKS文件

一、写在前面 数据库MySQL 8.0 通过自签命令在datadir下生成了所有的证书文件。由于Java的JDK不支持直接加载PEM格式的证书&#xff0c;所以需要将PEM格式证书转换成Java能够直接加载的JKS格式证书。我们需要将根证书ca.pem转换成JKS格式的根证书truststore.jks&#xff0c;将…

把 Windows 11 装进移动硬盘:Windows 11 To Go

本篇文章聊聊如何制作一个可以“说带走就带走”的 Windows 操作系统&#xff0c;将 Windows11 做成能够放在 U 盘或者移动硬盘里的 WinToGo “绿色软件”。 写在前面 在《开源的全能维护 U 盘工具&#xff1a;Ventoy》这篇文章的最后&#xff0c;我提到了一个关键词 “WinToG…

Mybatis XML 配置文件

我们刚开始就有说Mybatis 的开发有两种方式: 1.注释 2.XML 注解和 XML 的方式是可以共存的 我们前面说的都是注释的方式,接下来是XML方式 XML的方式分为三步 : 1.配置数据库(配在 application.yml 里面) 这个跟注释的配置是一样的,username应该都是一样的,password记得写…

6.Eclipse里下载Subclipse插件

方法一&#xff1a;从Eclipse Marketplace里面下载 具体操作&#xff1a;打开Eclipse --> Help --> Eclipse Marketplace --> 在Find中输入subclipse搜索 --> 找到subclipse点击install 方法二&#xff1a;从Install New Software里下载 具体操作&#xff1a;打开…

OSPF浅析

一、预习&#xff1a; 1、优点&#xff1a; 是一种典型的链路状态路由协议&#xff0c;协议号89&#xff0c;把大型网络分隔为多个较小、可管理的单元&#xff1a;Area a.减少LSA泛洪范围&#xff0c;有效地把拓朴变化 控制在区域内&#xff0c;达到网络优化的目的…

nodejs微信小程序+python+PHP本科生优秀作业交流网站的设计与实现-计算机毕业设计推荐

通过软件的需求分析已经获得了系统的基本功能需求&#xff0c;根据需求&#xff0c;将本科生优秀作业交流网站功能模块主要分为管理员模块。管理员添加系统首页、个人中心、用户管理、作业分类管理、作业分享管理、论坛交流、投诉举报、系统管理等操作。 随着信息化社会的形成…

【面试HOT200】二叉树的构建二叉搜索树篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于【CodeTopHot200】进行的&#xff0c;每个知识点的修正和深入主要参…

Leetcode 77 组合

题意理解&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 如&#xff1a;n3,k2,则有&#xff1a;12 13 23 一般&#xff0c;我们使用回溯法来解决组合问题。 组合问题没有顺序要求&#xff0c;所以 12 21 是同一个组合&#xff08;如…

黑苹果配置清单

手里的MacBookPro已经快沦为电子垃圾了&#xff0c;平时用MacOS比较多&#xff0c;Window用的比较少&#xff0c;而苹果电脑的价格不管是MacBookPro还是MacMini丐版的便宜但是面对现在Window动不动就64g内存的情况就显得微不足道了&#xff0c;高配的价格直接把我劝退&#xff…

PostgreSql HOT 技术

摘自唐成的《PostgreSQL修炼之道&#xff1a;从小工到专家&#xff08;第2版&#xff09;》。 一、概述 因为多版本的原因&#xff0c;当 PostgreSQL 中更新一行时&#xff0c;实际上原数据行并不会被删除&#xff0c;只是插入了一个新行。如果表上有索引&#xff0c;而更新的…

Leetcode题库(数据库合集)_ 难度:中等

目录 难度&#xff1a;中等1.股票的资本损益2. 当选者3. 页面推荐4. 2016年的投资5. 买下所有产品的人6. 电影评分6. 确认率7. 按分类统计薪水8. 餐馆营业额的变化增长8. 即时食物配送 ①9. 至少有5名直系下属的经理10. 游戏玩法分析11. 好友申请&#xff1a;谁有最多的好友12.…

Qlik 成为网络犯罪的焦点

研究人员警告说&#xff0c;Cactus 勒索软件组织正在利用 Qlik Sense 数据可视化、探索和监控解决方案中的关键漏洞来获得对企业网络的初始访问权限。 今年八月下旬&#xff0c;Qlik Sense 开发人员 针对影响 Windows 版本平台的两个关键漏洞发布了补丁 。 其中一个漏洞 CVE-…