图的深度优先遍历(DFS)和广度优先遍历(BFS)--解析

本文探讨了图的深度优先遍历(DFS)和广度优先遍历(BFS)两种方法。DFS利用递归高效地访问图中的顶点,避免重复访问。而BFS则借助辅助队列实现遍历,确保遍历效果。文章适用于理解图的数据结构和遍历策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图的数据结构不像二叉树那样,有明显的父子节点和兄弟节点的关系,它只有一个关系就是邻接关系。故对图中顶点的访问要采用标志数组(来确定改结点是否被访问,去除重复访问)。并且对图的深度遍历采用递归的方式是较高效的。

1.深度遍历(DFS)

#include<iostream>
#include<stdlib.h>
using namespace std;
//DFS
#define MAX 10
bool visited[MAX];
status (*VisitFunc)(int v);//定义函数指针 

void DFS(Graph G,int v)
{
     visited[v]=TRUE;VisitFunc(v);
     for(w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
       if(!visited[w]) DFS(G,w);//与树的DFS的区别 
 }

void DFSt(Graph G,status(*Visit)(int v))
{
     VisitFunc = Visit;//为函数指针赋值
     for(v=0;v<G.vexnum;++v) visited[v]=FALSE;//初始化标志数组
     //memset(visited,0,sizeof(visited));
     for(v=0;v<G.vexnum;++v)
      if(!visited[v])DFS(G,v);
 }

2.广度遍历(BFS)
广度优先遍历利用辅助队列后,很好的达到了遍历的效果。

#include<iostream>
#include<stdlib.h>
using namespace std;
//BFS
#define MAX 10
bool visited[MAX];
status
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值