算法数据结构笔记 深度优先搜索

算法:使用递归实现“深度优先搜索”的理解 “深度”的理解 深度优先的关键,在于深度,一扎到底,有一种“不撞南墙,死都不回头”的勇猛。理解深度优先搜索的关键,也就在深度上。 一般理解深度优先搜索会用迷宫举例子,其实这个例子本身就很形象具体了,可以很好理解,但是如果不抓住理解的本质,很容易就会犯难。 分叉、分叉、分叉 深度优先的搜索选择,在于执迷不悟地每次只选同一方向的分叉,直到撞死在南墙上,才想到要回到上一个分叉,另作选择。 所以,... 阅读详情

上一篇介绍的递归枚举实现,就是一个简单的深度优先搜索,他还有深度优先的基本模型:

void dfs(int step)
{
    //判断边界
    for(int i = 1;i <= n;i++) //尝试每一种可能性
    {
        dfs(step+1);//调用自己,继续下一步
    }
}

 

考虑一个问题,给定一个字符串,如何生成其中字符的所有的排列?

如果不用for循环的话,可以考虑用递归来替代for,如果对下面的代码输入三个字符,如:“abc”他就相当于执行了三层for循环。

#include <stdio.h>
#include <string.h>
#include <Windows.h>
char str[1000]; //保存输入字符串
int a; //字符串数量
char str1[1000]; //新建字符串
char book[1000]; //记录已经使用的字符
int q = 1;//计数用

void dfs(int step)
{
	if (step == a) //如果是三个字符的话,a = 3
	{
		printf("第%d个:%s\n", q++, str1);
		return;
	}
	for (int i = 0; i < a; i++)
	{
		str1[step] = str[i];
		dfs(step + 1); //+1后递归
	}
	return;
}

int main()
{
	scanf_s("%s", &str, 1000);
	a = strlen(str);
	dfs(0);
	system("pause");
}

 

运行结果:

 可见3*3*3 = 27他相当于三层for循环

可是这个出现了太多的重复字符,比如sss ssr之类的,怎么避免呢?

#include <stdio.h>
#include <string.h>
#include <Windows.h>
char str[1000]; //保存输入字符串
int a; //字符串数量
char str1[1000]; //新建字符串
char book[1000]; //记录已经使用的字符
int q = 1;//计数用

void dfs(int step)
{
	if (step == a) //如果是三个字符的话,a = 3
	{
		printf("第%d个:%s\n", q++, str1);
		return;
	}
	for (int i = 0; i < a; i++)
	{
//--------------------新加入的代码--------------
		if (book[i] == 0) //没有被标记的才进入
		{
			book[i] = 1; //标记为已用
			str1[step] = str[i];
			dfs(step + 1); //递归
			book[i] = 0;  //递归后取消标记,为0
		}
	}
	return;
}

int main()
{
	scanf_s("%s", &str, 1000);
	a = strlen(str);
	dfs(0);
	system("pause");
}

使用一个book来标记上字符是否使用即可。

 

STL函数算法笔记 今天我们来学习的是STL库中的一些函数。首先,STL这个东西大家一定非常熟悉,里面很多的数据结构都帮了大家不少忙,那么今天我们就来说几个重要的数据结构。 阅读详情

相关推荐

VS Code+ESP-IDF开发避坑指南:头文件标红报错的5种解决方法(附CMakeLists.txt配置)

本文详细解析了在VS Code中使用ESP-IDF开发ESP32时头文件标红报错的5种解决方法,包括环境配置检查、CMakeLists.txt规范配置、路径解析策略、缓存清理技巧和高级调试手段。特别提供了CMakeLists.txt的实战配置示例,帮助开发者彻底解决头文件路径问题,提升开发效率。

weixin_33670786的博客 560

深度优先搜索--递归步骤详解

例图结构 伪代码 void DFSRecursive(bool* visited, int v) { } void DFS() { bool* visited = new bool[VexNum]; for(int i = 0; i < VexNum; i++) { visited[i] = 0; } DFSRecursive(visited, 0); } 代码执行步骤

微雨入兰泽 922

从智能家居到智慧城市:AI Agent Harness Engineering 作为统一控制中枢

我们可以把每个独立的智能系统看作一根带有独立功能的电线:智能家居Agent是负责家庭设备控制的电线,社区Agent是负责社区管理的电线,城市交通Agent是负责交通调度的电线,而AHE就是把这些分散的电线整合起来的「智能线束」:它不仅负责把不同接口、不同协议、不同层级的Agent连接起来,还提供统一的编排、调度、协同、观测能力,实现全局效用最大化的智能决策。

AI Agent Harness Engineering 202

深度优先搜索(DFS)---递归实现

题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:“23” 输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 来源:力扣(LeetCode)...

qq_22305897的博客 727

Windows 10/11 注册表 ProfileImagePath 误改修复:3步恢复用户登录与数据安全

本文详细介绍了Windows 10/11系统中因误改注册表ProfileImagePath键值导致用户无法登录的修复方法。通过3个关键步骤,包括定位SID、安全修复注册表项及验证处理,帮助用户恢复登录并保障数据安全。特别强调了操作顺序的重要性以避免数据丢失,适用于各类Windows用户账户登录错误的紧急处理。

chuoshao2508的博客 403

Python+Tableau 全流程数据分析实战:从数据清洗到商业洞察可视化

本文通过Python+Tableau完整演示电商销售数据分析流程。首先使用Python进行数据清洗(缺失值处理、异常值过滤等)和探索性分析(商品类别、时间趋势等),然后导入Tableau创建交互式可视化仪表盘。分析发现电子产品销售额最高但利润率低,美妆类利润率最优,东部地区销售表现最好。最终提出优化供应链、加强美妆推广等商业建议,展示了Python数据处理与Tableau可视化的高效配合。所有代码可直接运行,适合数据分析初学者和从业者实战参考。

weixin_44520581的博客 337

深度优先搜索(DFS)的C语言实现(递归与栈实现)

深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。...

MZ21G的博客 3382

GPU 资源池化云平台解决方案​

定义与特点Kubernetes是一个开源的容器编排和管理平台,通过提供自动化和声明式的方式来部署、扩展、维护和运行应用程序。它支持跨多个主机和集群部署容器,确保应用程序的高可用性和可扩展性。Kubernetes提供了丰富的功能和插件,允许用户根据自己的需求进行定制和扩展。架构与组件控制平面(Control Plane):负责集群的决策(如调度)和集群状态的检测与响应。

ZhangJiqun&191cm&85kg 1162

C语言:深度优先遍历递归算法

深度优先遍历递归算法

零小唬的博客 1874

修改legged_gym地形后仍然是平地,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1566

k230 +canMV+ LVGL控件 仿手表表盘触摸屏滚动、选中后弹窗效果完整示例程序

现在智能手表用的越来越多,其交互方式比较有特点,现在k230开发板上,基于LVGL(Light and Versatile Graphics Library)编写一个嵌入式GUI应用程序,使用LVGL配合触摸屏实现模仿智能手表的表盘滚动效果,实际效果如下:程序使用LVGL图形库和MediaManager程序,创建带有触摸屏交互的GUI应用。程序主要功能包括显示初始化、LVGL初始化、创建GUI界面(包含一个可滚动的按钮列表,每个按钮点击会弹出消息框),以及处理触摸屏输入。

weixin_47446386的博客 1175

C/C++数据结构与算法笔记5(基于栈的深度优先搜索)

基本函数笔记来自优快云课程 C/C++ 数据结构与算法 (王桂林) 先定义一个栈(定义栈见笔记4,注意:本应用中在栈里存储的数据类型是 _Point (如下)而非笔记4中的char,注意修改!) typedef struct _Point { int _x; int _y; }Point; 深度优先搜索算法(英语:Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将.

霖郎 804

CloudCompare 和 PCL:点云网格化分析与处理

点云网格化是将点云数据转化为规则网格的过程,其主要思想是将离散的点云投影到一个平面上,然后对该平面进行划分,形成一系列小区域。在点云网格化方面,PCL 提供了各种算法和工具,可以实现高效的点云网格化操作。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化算法参数,如搜索半径和最大三角形边长等,执行了网格化操作,最后将网格化结果保存到输出文件中。以上示例代码中,首先加载了输入的点云数据,然后通过设置合适的网格化参数,如分辨率等,执行了网格化操作,最后将网格化结果保存到输出文件中。

TechPulseZ的博客 1293

数据结构学习笔记——图的遍历算法(深度优先搜索和广度优先搜索)

若通过邻接表表示图,则每个顶点都入队一次,即所需时间为O(|V|),搜索顶点的邻接顶点所需时间为O(|E|),其时间复杂度为O(|V|+|E|)。若通过邻接表表示图,则查找所有顶点的邻接顶点所需时间为O(|E|),访问顶点所需时间为O(|V|),即总时间复杂度为O(|V|+|E|)。4、查看V7单链表,其邻接顶点为2,即V3,它已经被访问过,于是回到V3单链表,搜索下一个未被访问的邻接顶点;11、查看V8单链表,其邻接顶点为4,即V5,已经被访问过,于是回到V5单链表,搜索下一个未被访问的邻接顶点;....

小宇y的博客 3万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【数据结构与算法学习笔记-Graph与广度/深度优先搜索】

本文为学习笔记,感兴趣的读者可在MOOC中搜索《数据结构与算法Python版》或阅读《数据结构(C语言版)》(严蔚敏)。 本文讨论了图结构的基本概念,存储方式,并以邻接表法通过Python实现了简单的图结构。在此基础上,通过词梯问题和骑士周游问题,尝试实现两种基础的算法:广度优先搜索和深度优先搜索。

floating_heart的博客 751

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

深度优先搜索解决全排列问题

深度优先搜索解决全排列问题 最近在看算法和数据结构,做个笔记来方便自己日后看复习。 代码如下:要说的都在注释里面了 #include<stdio.h> int a[10],book[10],n;//定义全局变量 void dfs(int step) { int i; //判断是否到达最后 if(step==n+1) { for(i=1;i<=n;i++) { printf("%d",a[i]); } printf("\n"); return; } fo

huang_625_的博客 326

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【数据结构和算法笔记】:图的深度优先搜索(DFS)

原创作者: u_16969274 转载于: https://blog.51cto.com/u_1696...

weixin_41343660的博客 77

python数据结构与算法学习笔记:使用深度优先搜索和广度优先搜索解决迷宫问题

搜索是算法中很基础的东西,目前笔者将其分类为深度优先搜索、广度优先搜索、树搜索。我们现在探究迷宫问题可以用到深度优先搜索和广度优先搜索解决,两种方法各有优缺笔者也是学习清华博士的数据结构和算法来写的清华博士数据结构与算法。

weixin_73788177的博客 2063

学习笔记-数据结构与算法 DFS模型 (深度优先搜索)

DFS树

爪蛙毁一生的博客 574

【学习笔记】数据结构与算法05:树、层序遍历、深度优先搜索、二叉搜索树

二叉树 binary tree是一种非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节点引用。 每个节点都有两个引用(指针),分别指向「左子节点 left-child node」和「右子节点 right-child node」该节点自身被称为这两个子节点的「父节点 parent node」.当给定一个二叉树的节点时,我们将该节点的左子节点及其以下节点形成的树称为该节点的「左子树 left subtr

Xcong_Zhu的博客 1003

以数据结构之——树来体会深度优先搜索【dfs】和广度优先搜索【bfs】的妙用:学比特算法课的自用笔记

本文介绍了树遍历的两种基础算法:深度优先搜索(DFS)和广度优先搜索(BFS)。DFS采用递归方式"一条路走到黑",实现代码使用标记数组避免重复访问。BFS采用队列实现"层序遍历",依次处理每层节点。两种算法都适用于无根树,通过邻接表存储边关系。文中提供了完整的C++实现代码,包含详细注释和运行示例,可作为算法学习的实用笔记。

小比特大梦想 118

AcWing算法基础课笔记1(持续更新)

自制AcWing算法基础课笔记,跟着课程视频做的,其中有一些自己学习过程中的思考

weixin_46695464的博客 2089

《算法神探》读书笔记

前几天读了《算法神探》,挺有意思一本书,使我对数据结构有了更深理解。笔记如下: 一、二分搜索 1、原理: 请注意,通过这几次的操作,此时虽然下界已经是目标值了(v=15),但是 我们仍需要继续搜索,直到中间值指向目标值。这是因为二分搜索是对中间 值进行判定,而不会判定上界和下界是否是目标值。 如果目标值不在数组中会发生什么呢?在搜索过程中,上下界之间的距 离会越来越近,直到它们之间没有任何还未检查...

qq_46167487的博客 347

python刷leetcode算法与数据结构笔记

刷算法题时的记录提示:以下是本篇文章正文内容,下面案例可供参考双指针法的关键在于根据问题特性设计指针的移动规则。对于有序结构,优先考虑对撞指针;对于链表或需要区间操作的问题,快慢指针更为常用。通过合理使用双指针,可以在不增加空间复杂度的前提下高效解决问题。

m0_52533849的博客 1226

#数据结构与算法学习笔记#PTA18:图(邻接表)+DFS(深度优先搜索)+BFS(广度优先搜索)(C/C++)

2018.5.22   上周解决完了树的大BOSS,这周正式进入图了。图根据边的性质可以分为有权图和无权图,有向图和无向图。无论哪一种图,都可以用邻接矩阵与邻接表两种数据结构表示,对于稠密图来说,邻接矩阵更方便一些,对于稀疏图来说,邻接表效率更高。图有两种遍历方法,深度优先搜索(DFS,Depth First Search)与广度优先搜索(BFS,Breadth First Search)。 ...

NJU_ChopinXBP的博客 733
上一篇: 算法数据结构笔记 枚举
下一篇: windows编程笔记【八】画笔与画刷
崔佳宇_
崔佳宇_ 优质创作者: 嵌入式与硬件开发技术领域 优质创作者: 嵌入式与硬件开发技术领域
博客等级 码龄10年 1万+粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值