【数据结构】图的遍历:广度优先(BFS),深度优先(DFS)

目录

1、广度优先(BFS)

算法思想 

广度优先生成树 

知识树 

代码实现 

2、深度优先(DFS)

算法思想 

深度优先生成树

知识树 

代码实现 


1、广度优先(BFS)

算法思想 

         图的广度优先遍历(BFS)是一种遍历图的算法,其思想是从起始顶点开始遍历图,先访问起始顶点的所有直接邻居,然后遍历这些邻居的直接邻居,以此类推,直到遍历完整个图。

BFS算法需要使用一个队列来保存已经遍历过但还未访问其邻接顶点。具体步骤如下:

  1. 将起始顶点加入队列中,并标记为已访问。
  2. 从队列中取出一个顶点V,并依次访问V的所有未被访问的邻接顶点,并将这些邻接顶点加入队列中,并标记为已访问。
  3. 重复步骤2,直到队列为空。

广度优先生成树 

         广度优先搜索(BFS)可以用来生成一棵图的广度优先生成树(BFS树),该树的根节点为起始节点,其余节点按照宽度优先的顺序依次加入。BFS树可以用来解决最短路径问题,以及其他需要按照距离或层次访问节点的问题。

具体的实现步骤如下:

  1. 初始化BFS树,将起始节点加入树中。
  2. 将起始节点加入待访问队列。
  3. 对于队列中的每个节点,依次遍历其所有邻居节点。
  4. 对于每个邻居节点,如果该节点还未加入BFS树,则将其加入,并将该邻居节点的父节点设为当前节点。
  5. 将已访问的节点从队列中移除。
  6. 重复步骤3-5,直到队列为空。

知识树 

 

代码实现 

 下面是C语言实现BFS的示例代码:

#include <stdio.h>
#include <stdlib.h>

#define MAXV 100  // 最大顶点数

typedef struct {
    int edges[MAXV][MAXV];  // 邻接矩阵
    int n;  // 顶点数
} Graph;

typedef struct {
    int data[MAXV];
    int front, rear;
} Queue;

in
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十三衙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值