广度优先搜索生成树怎么画_深度优先生成树和广度优先生成树(详解版)

本文详细介绍了无向图的生成树和生成森林的概念,并通过实例展示了深度优先搜索(DFS)和广度优先搜索(BFS)在构建生成树和生成森林的过程。通过DFS和BFS,我们可以得到不同的生成树形态,如深度优先生成树和广度优先生成树。文章还提供了C++代码实现,用于构建和遍历这两种生成树。
摘要由CSDN通过智能技术生成

前面已经给大家介绍了有关生成树和生成森林的有关知识,本节来解决对于给定的无向图,如何构建它们相对应的生成树或者生成森林。

其实在对无向图进行遍历的时候,遍历过程中所经历过的图中的顶点和边的组合,就是图的生成树或者生成森林。

图 1 无向图

例如,图 1 中的无向图是由 V1~V7 的顶点和编号分别为 a~i 的边组成。当使用深度优先搜索算法时,假设 V1 作为遍历的起始点,涉及到的顶点和边的遍历顺序为(不唯一):

此种遍历顺序构建的生成树为:

图 2 深度优先生成树

由深度优先搜索得到的树为深度优先生成树。同理,广度优先搜索生成的树为广度优先生成树,图 1 无向图以顶点 V1 为起始点进行广度优先搜索遍历得到的树,如图 3 所示:

图 3 广度优先生成树

非连通图的生成森林

非连通图在进行遍历时,实则是对非连通图中每个连通分量分别进行遍历,在遍历过程经过的每个顶点和边,就构成了每个连通分量的生成树。

非连通图中,多个连通分量构成的多个生成树为非连通图的生成森林。

深度优先生成森林

图 4 深度优先生成森林

例如,对图 4 中的非连通图 (a) 采用深度优先搜索算法遍历时,得到的深度优先生成森林(由 3 个深度优先生成树构成)如 (b) 所示(不唯一)。

非连通图在遍历生成森林时,可以采用孩子兄弟表示法将森林转化为一整棵二叉树进行存储。

具体实现的代码:

#include

#include

#define MAX_VERtEX_NUM 20 //顶点的最大个数

#define VRType int //表示顶点之间的关系的变量类型

#define VertexType int //图中顶点的数据类型

typedef enum{false,true}bool; //定义bool型常量

bool visited[MAX_VERtEX_NUM]; //设置全局数组,记录标记顶点是否被访问过

typedef struct {

VRType adj; //对于无权图,用 1 或 0 表示是否相邻;对于带权图,直接为权值。

}ArcCell,AdjMatrix[MAX_VERtEX_NUM][MAX_VERtEX_NUM];

typedef struct {

VertexType vexs[MAX_VERtEX_NUM]; //存储图中顶点数据

AdjMatrix arcs; //二维数组,记录顶点之间的关系

int vexnum,arcnum; //记录图的顶点数和弧(边)数

}MGraph;

//孩子兄弟表示法的链表结点结构

typedef struct CSNode{

VertexType data;

struct CSNode * lchild;//孩子结点

struct CSNode * nextsibling;//兄弟结点

}*CSTree,CSNode;

//根据顶点本身数据,判断出顶点在二维数组中的位置

int LocateVex(MGraph G,VertexType v){

int i=0;

//遍历一维数组,找到变量v

for (; i

if (G.vexs[i]==v) {

break;

}

}

//如果找不到,输出提示语句,返回-1

if (i>G.vexnum) {

printf("no such vertex.\n");

return -1;

}

return i;

}

//构造无向图

void CreateDN(MGraph *G){

scanf("%d,%d",&(G->vexnum),&(G->arcnum));

getchar();

for (int i=0; ivexnum; i++) {

scanf("%d",&(G->vexs[i]));

}

for (int i=0; ivexnum; i++) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值