dfs,bfs总结

dfs与bfs总结

使用场景

dfs

dfs通常适用于所有解问题;一般规模比较小

注意剪枝,约束条件处剪枝

参考题目:
链接: 自然数的拆分
链接: 放苹果
链接: 八皇后
链接: 棋盘问题

bfs

bfs适用于寻找最优的解,比如最小步数;规模可以比较大

注意标记,遍历过的点标记一下,遍历过的没有必要再入队了

参考题目:
链接: 走迷宫
链接: 抓住那头牛

注:连通性问题比如这个题: 细胞,个人觉得dfs,bfs都可以,但是bfs可以解决规模比较大的;dfs/bfs有的题目是图形搜索,有的是没有图的。

模板

dfs
void dfs(层数x,...){
	if(找到解){
		...//根据题意来
		return;
	}
	if(到尽头了但没有解){
		return;
	}
	for(本层有几个扩展状态){
		if(约束条件){
			修改操作;
			标记;
			dfs(x+1,...)
			操作还原;
			还原标记;
			//注:修改与标记 以及是否还原要根据题目来
		}
	}
}
bfs
void bfs(){
	创建队列q;
	起点入队;
	标记;
	while(队列q不为空){
		取队首元素start;
		start出队;
		if(达到目标){
			...
			return;
		}
		for(与start相邻的元素){
			if(相邻元素不越界&&满足约束){
				入队;
				标记;
			}
		}
	}
}
推荐文章

链接: DFS与BFS的区别
链接: DFS和BFS入门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值