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

news/2024/7/20 21:28:00 标签: 深度优先, 算法, 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都是0
	cout << num1 << endl;
	return 0;
}
一些废话:

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

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

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

 


http://www.niftyadmin.cn/n/5455512.html

相关文章

Tuxera for Mac2024免费读写硬盘U盘工具

作为软件产品专家&#xff0c;我对各类软件都有较为深入的了解&#xff0c;下面介绍Tuxera for Mac这款读写硬盘/U盘工具的相关信息&#xff1a; Tuxera for Mac是一款高效稳定的NTFS读写工具&#xff0c;专为解决Mac系统无法直接读写NTFS格式驱动器的问题而设计。它提供了完整…

Python爬虫之Scrapy框架系列(25)——分布式爬虫scrapy_redis完整实战【ZH小说爬取】

本篇文章要做的是&#xff1a;将之前做的使用Scrapy中Crawl模板爬取纵横小说的项目改编为使用Scrapy_redis的项目&#xff01;&#xff01;&#xff01; 目录&#xff1a; 每篇前言&#xff1a;1.首先&#xff0c;将之前的项目改为单个的使用scrapy\_redis的分布式爬虫项目。第…

如何更好的优化HTTPS

由裸数据传输的 HTTP 协议转成加密数据传输的 HTTPS 协议&#xff0c;给应用数据套了个「保护伞」&#xff0c;提高安全性的同时也带来了性能消耗。 HTTPS 相比 HTTP 协议多一个 TLS 协议握手过程&#xff0c;目的是为了通过非对称加密握手协商或者交换出对称加密密钥 分析性…

AI 成足球比赛「关键先生」:DeepMind 发布 TacticAI,战术布局实用性高达 90%

在刚刚结束的世界杯预选赛中&#xff0c;国足在天津主场以 4:1 的得分大胜新加坡&#xff0c;一扫上一场在领先优势下被对方逼平的阴霾&#xff0c;也迎来了球队 2024 年的首场胜利。目前&#xff0c;中国队暂居 C 组第 2 位&#xff0c;保住了晋级 18 强赛的希望。 享受胜利喜…

MySQL索引剖析【了解背后的数据结构】

文章目录 常用索引概念聚簇索引 &#x1f389;非聚簇索引&#xff08;二级索引&#xff09; 数据结构选择Hash结构 ⭐️有序数组二叉搜索树AVL树&#xff08;平衡二叉搜索树&#xff09;B-Tree&#xff08;多路平衡查找树&#xff09;BTree ⭐️ MySQL中索引的实现InnoDB 索引实…

springBoot+ureport报表引擎

UReport是一款基于单元格迭代模型的纯Java中式报表引擎。它架构于Spring之上&#xff0c;因此与企业应用具有良好的集成能力。UReport提供了基于Eclipse插件与基于网页的两种报表模版设计方式&#xff0c;采用类Excel报表模版设计风格&#xff0c;简单、易上手&#xff0c;可在…

滑动窗口(蓝桥杯,acwing,单调队列)

题目描述&#xff1a; 给定一个大小为 n≤1e6的数组。 有一个大小为 k的滑动窗口&#xff0c;它从数组的最左边移动到最右边。 你只能在窗口中看到 k个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子&#xff1a; 该数组为 [1 3 -1 -3 5 3 6 7]&#xff0c;k 为 …

pulsar: 四种消费模式

一、独享模式(Exclusive) 默认情况下是独享模式&#xff0c;相同的suscription name的消费者不能有多个。 subscription name有点类似于kafka的消费者组。 package cn.edu.tju.test1;import org.apache.pulsar.client.api.*;public class ExclusiveModeConsumer01 {private st…