简单版-----图论-----图的两种遍历方式:DFS 和 BFS

图的遍历

  • 图的遍历是和树的遍历类似,我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点都仅仅被访问一次,这一过程就叫做图的遍历(Traversing Graph)
  • 图的两种遍历算法:深度优先搜索(DFS),广度优先搜索(BFS)
    值得强调的是,树是一种特殊的图,因此图的遍历也类似于树的遍历
#include<stdio.h>
#include<stdlib.h>

#define TypeE int
#define TypeV int
#define MaxVertexNum 20
#define MAXSIZE 69999

typedef struct {
   
	TypeE G[MaxVertexNum][MaxVertexNum]; //邻接矩阵
	TypeV vex[MaxVertexNum]; //顶点数组,存储目标数据 
	TypeE numEdges; //边数 
	TypeV numVertexes; //顶点数  	
}MGraph;

typedef struct QNode {
   
	int data;
	struct QNode* next;
}QNode , *QueuePtr;

typedef struct
{
   
	QueuePtr front, rear;//队头, 队尾
}LinkQueue;

深度优先搜索(DFS)

  • 深度优先搜索(Depth_First_Search)的定义:
    从图中某个顶点V出发,访问该顶点,然后从该点的邻接点出发深度优先遍历,直到图中所有和V有路径相通的点都被访问到。
    实际上,我们这里讲的是连通图,对于非连通图,若图中还有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点,重复上述过程,直到图中所有点都被访问
  • 深度优先搜索的分析:
    假设有9个房间,分别给这几个房间编号A~I,从A房间出发沿着路走遍所有房间,你会怎么做呢?
    hh,我打赌你肯定会走乱的,因为你没有一个准确的方案.
    • 如果让你选择这样一套方案,从开始的房间走向一个相邻的房间,然后以该房间为起点找走到下一个相邻的房间,直到无路可走(与当前房间相邻的房间都被访问过),然后回到上一个房间看看与它相邻的房间是否访问过,如果有,就走向这个相邻的房间,如果没有,就回到上上一个房间看看与它相邻的房间是否访问过,重复上述过程,直到全部房间被访问完全为止。
      类似于树的前序遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值