BFS和DFS

一.BFS

1.BFS介绍

BFS又称宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索之一。这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了宽度优先搜索类似的思想。BFS属于一种盲目搜索法,目的是系统的展开并检查图中的所有节点,以找寻结果。它并不考虑结果的可能位置,彻底的搜索整张图知道找到结果为止。

2.BFS流程

广度优先遍历,指的是从图的一个未遍历的节点出发,遍历这个节点的相邻节点,再依次遍历每个相邻结点的相邻节点。

上述的广度优先遍历图如下:

先便历第一层再遍历第二层、第三层、第四层......

3,BFS一般解决的问题有:

(1):二叉树层序搜索遍历(各种变形例如分层输出、之字形等等空间优化)

(2):无权图的最短路径

(3):其他的迷宫搜索问题(节点带某些权值的) 

4,BFS代码实现

#include<iostream>
#include<vector>
#include<queue>
namespace algo

二:DFS

1,DFS又称深度优先遍历,即深度越大的节点会被优先扩展。在DFS中使用栈数据结构来实现上述特征。

2,DFS流程:

(1):某个结点开始先按照一个方向遍历到尽头,同时标记已经走过的点。

(2):遍历到尽头后退回到上一个点,同时清除当前的标记。往下一个方向遍历一次,然后重复步骤(1)。

(3):一直到所有流程走完,即退回到起点。

注意:

在遍历的过程中需要标记 因为不进行标记会出现死循环,标记就代表这个点被用过不能用了,而撤回标记就说明这个点又能重新使用了

大致访问顺序为:

 

 3,DFS一般解决的问题有:

(1):剪枝问题(剪掉没必要的搜索)

(2):记忆化(防止太多重复操作)

4,DFS代码实现

#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 ;//作用是返回上一级的dfs函数而不是返回主函数
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值