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

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

算法图像

 如图所示,从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
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值