搜索与图论第一期 DFS(深度优先搜索)

前言

DFS这部分难度不大,大家应该完全掌握!!!

一、DFS的基本内容

内容:

深度优先遍历图的方法是,从图中某顶点v出发:
(1)访问顶点v;
(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;
(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止

深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。

模板:

void DFS(int step){if(满足边界条件){相应操作 }for(尝试每种可能){if(满足条件){标记继续下一步DFS(step + 1)恢复初始状态(回溯的时候需要) }} 
}

二、例题

1.全排列

AC代码:

DFS:
#include <iostream>
using namespace std;
const int N = 10;
int n;
int path[N];
bool st[N];//true表示这个点已经用过了,false表示这个点没用过void dfs(int u) {if (u == n) {//当走到最后一个位置的时候,说明此时已经把所有位置填满了,就输出for (int i = 0; i < n; i++)printf("%d ", path[i]);puts("");return ;}for (int i = 1; i <= n; i++)//没走到最后一个位置,就枚举一下当前这个位置可以填哪些数if (!st[i]) {//如果当前这个数没有被用过path[u] = i;//把i放到当前这个位置上去st[i] = true;//记录i已经被用过了dfs(u + 1);//递归到下一层//  path[u] = 0;恢复现场st[i] = false;//恢复现场}
}int main() {cin >> n;dfs(0);return 0;
}
调库:
#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>vector<int>v;
int n;
int main()
{cin>>n;for(int i=1;i<=n;i++){v.push_back(i);}do{for(int i=0;i<n;i++){cout<<v[i]<<" ";}cout<<endl;}while(next_permutation(v.begin(),v.end()));return 0;
}

2.n皇后问题:


AC代码:

#include<bits/stdc++.h>using namespace std;int a[11],n,cnt;bool check(int x, int y)
{for(int i=1;i<=x;i++){if(a[i]==y) return false;if(a[i]+i==x+y) return false;if(i-a[i]==x-y) return false;}//两条对角线 以及列数return true;
}
void dfs(int row)
{if(row==n+1){cnt++;return ;}for(int i=1;i<=n;i++){if(check(row,i)){a[row]=i;//row为行 i为列dfs(row+1);a[row]=0;}}
}
int main()
{cin>>n;dfs(1);cout<<cnt<<endl;return 0;
}

总结

DFS算法还是挺重要的,希望大家能够熟练掌握,感谢大家的观看!!!

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

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

相关文章

圣诞老人遇见 GenAI:利用大语言模型、LangChain 和 Elasticsearch 破译手写的圣诞信件

在北极的中心地带&#xff0c;圣诞老人的精灵团队面临着巨大的后勤挑战&#xff1a;如何处理来自世界各地儿童的数百万封信件。 圣诞老人表情坚定&#xff0c;他决定是时候将人工智能纳入圣诞节行动了。 圣诞老人坐在配备了最新人工智能技术的电脑前&#xff0c;开始在 Jupyter…

【LangChain学习之旅】—(4) 模型I/O:输入提示、调用模型、解析输出

【LangChain学习之旅】—&#xff08;4&#xff09; 模型I/O&#xff1a;输入提示、调用模型、解析输出 Model I/OLangChain 中提示模板的构建语言模型为什么选择langchain输出解析总结 Reference&#xff1a;LangChain 实战课 Model I/O 我们可以把对模型的使用过程拆解成三块…

计算机体系结构----计分板(scoreboard)算法

计分板算法简介 计分板记录着所有必要的信息&#xff0c;用来控制以下事情&#xff1a; 每条指令何时可以读取操作数并投入运行&#xff08;对应着RAW冲突的检测&#xff09;每条指令何时可以写入结果&#xff08;对应着WAR冲突的检测&#xff09;在计分板中&#xff0c;WAW冲…

利用numpy+sklearn+matplotlib演示如何创建和训练线性回归模型

通过一个具体的业务场景来演示如何创建和训练线性回归模型。让我们考虑一个房地产市场的例子&#xff0c;其中我们想要根据房屋的大小&#xff08;平方英尺&#xff09;来预测其市场价格。 业务场景 假设你的任务是帮助一个房地产公司预测不同大小房屋的市场价格。你有一份包…

nvm管理多版本Node.js

nvm管理多版本Node.js 可能大家都曾苦恼于Node环境问题&#xff0c;某个项目需要升版本&#xff0c;某项目又需要降&#xff0c;甚至还出现npm版本与Node对不上的情况。 通过nvm进行版本管理&#xff0c;即可解决。 卸载Node 通过命令行输入node -v命令查看是否已安装Node&…

【设计模式】创建型模式之单例模式(Golang实现)

定义 一个类只允许创建一个对象或实例&#xff0c;而且自行实例化并向整个系统提供该实例&#xff0c;这个类就是一个单例类&#xff0c;它提供全局访问的方法。这种设计模式叫单例设计模式&#xff0c;简称单例模式。 单例模式的要点&#xff1a; 某个类只能有一个实例必须…

烟火检测AI边缘计算智能分析网关V4在安防项目中的应用及特点

一、行业背景 随着社会和经济的发展&#xff0c;公共安全和私人安全的需求都在不断增长。人们需要更高效、更准确的安防手段来保障生命财产安全&#xff0c;而人工智能技术正好可以提供这种可能性&#xff0c;通过智能监控、人脸识别、行为分析等手段&#xff0c;大大提高了安防…

详细讲解MybatisPlus实现逻辑删除

目录 前言1. 基本知识2. 实战Demo3. 拓展 前言 对于MybatisPlus的相关知识可在我的博客进行搜索 对应的CRUD相关知识也可看我这篇文章&#xff1a;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 在讲述逻辑删除这个概念时&#xff0c;先引入另外一个概念&…

借助Gitee将typora图片上传CSDN

概述 前面已经发了一个如何借助Github将typora上的图片上传到csdn上&#xff0c;但这有个缺陷&#xff1a;需要科学上网才能加速查看已经上传到github上的图片&#xff0c;否则就会出现已经上传的图片&#xff0c;无法正常查看的问题 如何解决&#xff1f; 那就可以使用Gite…

wpf的资源路径

1、手动命名空间 xmlns:share"clr-namespace:***;assembly**" 2、资源文件 Pack URI 编译到本地程序集内的资源文件的 pack URI 使用以下授权和路径&#xff1a; 授权&#xff1a;application:///。 路径&#xff1a;资源文件的名称&#xff0c;包括其相对于本地…

坑记(HttpInputMessage)

一、背景知识 public interface HttpInputMessage extends HttpMessage Represents an HTTP input message, consisting of headers and a readable body.Typically implemented by an HTTP request on the server-side, or a response on the client-side.Since: 3.0 Author:…

dotJS 2018 - Anders Hejlsberg - TypeScript: JavaScript的静态类型

如何为像JavaScript这样的动态语言定义和实现静态类型系统&#xff0c;为什么要这样做呢? Anders Hejlsberg探讨了TypeScript是如何产生的&#xff0c;它与经典类型系统有何不同&#xff0c;以及即使你不喜欢类型&#xff0c;它也能给你带来好处。 视频地址&#xff1a; http…

Web端3D渲染引擎HOOPS SDK助力打造创新型3D测量软件

HOOPS SDK是全球领先的3D领域开发工具提供商Tech Soft 3D 打造的控件产品&#xff0c;HOOPS SDK包括4款3D软件开发工具&#xff0c;其中HOOPS Exchange是一款CAD数据转换工具&#xff0c;可读取和导入30多种CAD文件格式&#xff1b;HOOPS Communicator是一款专注于Web端工程图形…

NPS配置https访问web管理页面

因为NPS默认也支持http的访问&#xff0c;所以在部署完后就一直没在意这个事情。 因为服务器是暴露在公网内的&#xff0c;所以还是要安全一点才行。不然一旦远控的机器被破解了就很危险了 一、使用nginx反向代理访问 1、首先在nps的配置文件里关闭使用https选项&#xff0c;…

RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用RPA全球生态 2024-01-05 17:27 发表于河北

目前国内外研究人员对于RPA机器人在财务管理流程优化领域中的应用研究层出不穷&#xff0c;但现有研究成果主要集中在财务业务单一领域&#xff0c;缺乏财务管理整体流程一体化管控的研究。RPA机器人的功能绝非单一的财务业务处理&#xff0c;无论从自身技术发展&#xff0c;或…

Retrofit2 + Hilt + MVVM + 协程 + Paging3 + SmartRefreshLayout 整合 使用

前言 Kotlin Android 框架 Jetpack相关库 MVVM 整合 使用。 1、Retrofit2 Hilt MVVM 2、Retrofit2 Hilt MVVM 协程 3、Retrofit2 Hilt MVVM 协程 Paging3 SmartRefreshLayout 效果图 源码地址 GitHub - LanSeLianMa/Retrofit2HiltMVVMCoroutine: Kotlin Andro…

jmeter监控服务器资源使用情况

GitHub - undera/perfmon-agent: Server metrics fetching agent, based on SIGAR 下载安装包&#xff1a;ServerAgent-2.2.3.zip 解压先 启动&#xff0c;如果是windows运行startAgent.bat&#xff0c;如果是linux运行startAgent.sh 注意&#xff1a;linux上注意权限的问题…

STM32蓝牙小车、红外循迹小车、超声波避障小车项目设计

一、前言 本文旨在分享我学习STM32的过程中&#xff0c;为了强化学习成果&#xff0c;试着制作一些实训项目。最开始做的就是STM32蓝牙小车、STM32红外循迹小车、STM32超声波避障小车。 相信看完本文的你&#xff0c;一定可以亲手制作一辆属于自己的智能小车&#xff01; 注&am…

03 - 系统调用

---- 整理自 王利涛老师 课程 实验环境&#xff1a;宅学部落 www.zhaixue.cc 文章目录 1. 系统调用基本概念1.1 一个系统调用的例子1.2 什么是系统调用&#xff1f;软件复用的角度 2. 软中断&#xff1a;系统调用的入口2.1 权限管理2.2 系统调用号2.4 man 2 syscall2.5 实验&am…

优化 ParamValidator,让编辑器Pycharm智能提示校验方法

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 基于 Valid…