C++一本通基础算法:深度优先搜索(DFS)

本文介绍了深度优先搜索(DFS)的基本概念,通过算法图像和实例展示了DFS如何进行搜索。讨论了DFS的特点,即搜索层数不定,并提供了C++实现的搜索代码示例,包括迷宫问题和八皇后问题的解决方案。强调了DFS在解决行、列和对角线冲突问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法概述:搜索,类似于枚举,从头结点开始,搜索发现有一些路可以走,先选择一条,走到一个结点处,重复上述过程,一直走到不能走为止,然后返回上一个结点,选择第二条路,一直检索知道将头结点所有的路走完。

算法图像

 如图所示,从1开始,发现可以到达2,开始递归调用,到达2的位置,然后发现,从2可以到达3,再递归调用,到达3,发现3不能再走了,返回到2,发现从2还可以到4,递归调用到达4,发现4也不能走,再次回到2,……,直到2所有的路都走完以后,返回到1,发现从1可以到6,……,当6所有的路径也走完之后,回到1,此时1已经没有任何可以走的路径了,搜索结束。

算法特点:和枚举一样要计算所有的结果,但与枚举不同的是,枚举的循环层数一定,但深度优先搜索的层数不为定值。

搜索部分代码的一般格式

void dfs (int x,int p) {	//x代表当前搜索层数,p决定下一次递归的大范围 
	if ( ) {           		//如果满足终止条件(找到一组解) 
					   		//执行操作 
		return;				//返回上一个函数 
	}
	for (int i = p + 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值