DFS算法(C/C++)(内含立例题)

 DFS:

DFS又称深度优先搜索,是一种图运算方法,它从第一个节点走起,一直往下走,一直走到不能继续再走,就返回上一个节点,继续搜索其他地方,直到找到目标节点为止。

DFS可以解决迷宫问题:

1.先选择一条路一直走下去,直到遇到死胡同,不能继续往下走时;

2.返回上一个分岔口,选择其他路径走,一定能找到一条通往出口的路

DFS更加适合处理深度优先的问题 

废话不多说,直接上例题

例题

洛谷P1036 [NOIP2002 普及组] 选数

PS:这是一道纯暴力搜索的问题,前提是要会递归(!ovo!)

题目描述:

AC代码: 
#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
int n, k;
int a[100000];
//一个简单的判断素数的函数
int is(int x) {if (x == 1) {return 0;}else if (x == 2) {return 1;}else{for (int i = 2; i <= sqrt(x); i++) {if (x % i == 0) {return 0;}}return 1;}
}
int num1 = 0;    //记录种类数
void dfs(int num, int sum, int kai) {//num是当前相加的数字个数//sum是num个数相加的总和//kai是起始的数字位置if (num == k) {     //当相加的数字总数等于k时if (is(sum) == 1) {num1++;        //是素数就有一个满足题意的值}return ;}else {for (int i = kai; i < n; i++) {        //从起始位置向后进行递归搜索dfs(num + 1, sum + a[i], i + 1);}}
}
int main() {cin >> n >> k;for (int i = 0; i < n; i++) {cin >> a[i];}sort(a, a + n);    //这里的排序写在底下了嗷dfs(0, 0, 0);       //起始的num,sum,kai都是0cout << num1 << endl;return 0;
}
一些废话:

其实这道题的难点是:怎么去重;

去重所使用的方法就是:不降原则

不降原则顾名思义就是所加的数只增不降,因此要保证数组中的数据是升序的,进行一个sort排序即可(ennnnn,不过其实真正的不降原则是可以相等的,但是这一题是不可以的,但是题上给的数据有点奇怪,是没有重复的,并且给出的就是升序的,如果数据有相等的话,在加上一个对数组a的去重步骤即可)

 

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

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

相关文章

Git基础(26):撤销历史commit提交

文章目录 前言撤销(已发布到仓库)活动1撤销修改(未commit) 前言 有时候项目发布时&#xff0c;之前开发的某功能不需要上线&#xff0c;需要将其屏蔽&#xff0c;如何快速将其屏蔽&#xff1f; 撤销(已发布到仓库)活动1 tips:执行commit的撤销前建议备份被撤销的内容 撤销活动…

CCEWs | MRG波和EWs波

Convectively coupled equatorial waves 简介 对流耦合赤道波动控制了热带一部分的降水变率&#xff0c;其水平结构和频散特征来自于Matsuno’s(1966)在赤道 β \beta β 平面上的浅水方程的解&#xff0c;包括&#xff1a; kelvin wave equatorial Rossby wave mixed Ross…

2024年天津理工大学中环信息学院退役大学生士兵专业课缴费流程

天津理工大学中环信息学院2024年退役大学生士兵高职升本考试报名考务费网上缴费说明 一、缴费方式 通过微信&#xff0c;支付宝&#xff0c;建行手机银行进入缴费页面输入姓名及身份证号点击查询 核对缴费信息无误后&#xff0c;点击缴费&#xff0c;选择对应渠道缴费&#x…

桶排序---

1、算法概念 桶排序&#xff1a;一种非比较的排序算法。桶排序采用了一些分类和分治的思想&#xff0c;把元素的值域分成若干段&#xff0c;每一段对应一个桶。在排序的时候&#xff0c;首先把每一个元素放到其对应的桶中&#xff0c;再对每一个桶中的元素分别排序&#xff0c…

设计模式之工厂方法模式精讲

工厂方法模式又叫虚拟构造函数&#xff08;Virtual Constructor&#xff09;模式或者多态性工厂&#xff08;Polymorphic Factory&#xff09;模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口&#xff0c;将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…

在ubuntu上搭建系统监控系统

大纲 数据生产方安装和运行验证 数据收集、存储和分发方下载和解压修改配置运行验证 数据消费方下载和运行验证新增数据源新增看板关联看板和数据源效果展现 参考资料 在一个监控系统中&#xff0c;一定会有“数据生产方”和“数据消费方”存在。“数据生产方”用于产出需要监控…

企业如何利用数字人员工,加速企业数字化发展?

元宇宙概念的兴起&#xff0c;为企业数字化转型提供了新的想象空间&#xff0c;各领域企业纷纷推出高辨识度、强互动性的数字人员工、数字代言人&#xff0c;以数字人短视频、数字人发布会、虚拟数字人直播、AI交互数字人互动等场景&#xff0c;加速企业数字化进程。 建发股份数…

基于小华例程3.2版本USB之usb_dev_cdc工程深入代码详解USB过程

打开工程首先看readme文件&#xff1a;&#xff08;官方的说明中&#xff0c;串口3和4不明确&#xff0c;根据代码和实测&#xff0c;确定CDC测试使用的是串口3&#xff0c;后文我会讲到为什么是串口3&#xff09;. 样例使用说明Date Author IAR MDK …

Visual Studio 2022报错c1083,win11解决办法

如果头文件报错&#xff0c;并且编译器报错是c1083&#xff0c;无法处理的时候&#xff0c;包括卸载重装也是无济于事的时候 此时可以采取一下办法进行修改 出现这个的主要原因是安装 Windows SDK 时版本出错&#xff0c;需要根据自己的 windows 版本选择安装对应版本的 Wind…

35---USB PHY---ULPI UTMI+ HSIC

视频链接 USB PHY硬件电路设计---ULPI & UTMI & HSIC 01_哔哩哔哩_bilibili USB PHY---ULPI & UTMI & HSIC 1、USB PHY基本介绍 芯片厂商开发了一些USB PHY芯片&#xff0c;可以把DP、DM上的差模信号转成共模信号。 USB PHY负责最底层的信号转换&#xff0…

智能资产管理:RFID技术与国产WMS系统的融合之路

随着信息技术的飞速发展&#xff0c;企业对于资产管理的需求也日益增长。传统的资产管理方法已无法满足现代企业的管理需求&#xff0c;因此&#xff0c;一种结合了RFID技术与国产WMS系统的智能资产管理方案应运而生。 RFID&#xff0c;即无线射频识别技术&#xff0c;通过无…

网络播放解码器 SIP-7102网络音频解码播放器

网络播放解码器 SIP-7102网络音频解码播放器 SIP-7102是一款支持SIP协议的网络音频解码播放器&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数据&#xff0c;通过设备的DSP及放大电路&#xff0c;可以直接连接两路15W的扬声器。可以用于公共广播、报警系统、…