数据结构——图的深度优先搜索算法(DFS)

本文详细介绍了图的深度优先搜索(DFS)算法,并提供了C++实现。通过邻接表存储图,标记已访问节点,按照特定顺序遍历,确保不重复访问。最终展示了一个完整的DFS遍历过程及其执行顺序。
摘要由CSDN通过智能技术生成

这篇专栏记录的是图的深度优先搜索算法(DFS)。(完整代码在最下面)

对应的广度优先搜索算法

存储图,首先要定义顶点的结构体。

//边
typedef struct Edge{
   
    int adj;	//邻接点对应的的下标 
    Edge *next;	//指向下一个结点 
}Edge;
 
//顶点
typedef struct{
   
    int data;	//顶点信息 
    Edge *first;	//指向第一个邻接点 
}Node;

//图
typedef struct{
   
    Node Node[15];	//顶点 
    int numVertex, numEdge;	//顶点数,边数 
}Graph;

由于访问节点不能重复,因此要定义一个数组来标记该顶点是否已经访问。

bool DFSvisited[50];  //标记结点是否被访问过 

创建的图和存储图对应的邻接表如图所示。
在这里插入图片描述

图和存储图对应的邻接表

在这里插入图片描述

输出结果

执行顺序:
1、先访问Node[0].data(即1)。
2、由于Node[0].first.adj为1,所以访问Node[1].data(即2)。
3、由于Node[1].first.adj为4,所以访问Node[4].data(即5)。
4、由于Node[4].first为NULL,回退到Node[1].first。
5、由于Node[1].first.next为NULL,回退到Node[0].first。
6、由于Node[0].first.next.adj为2,所以访问Node[2].data(即3)。
7、由于Node[2].first为NULL,回退到Node[1].first.next。
8、由于Node[1].first.next.next.adj为3,所以访问Node[3].data(即4)。
9、由于Node[3].first已经访问过,回退,发现每一个顶点都访问过了。

完整代码:

#include <iostream>
using namespace std;
	
bool DFSvisited[50];  //标记结点是否被访问过 

//边
typedef struct Edge{
   
    int adj;	//邻接点对应的的下标 
    Edge *next;	//指向下一个结点
  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值