图的遍历
- 图的遍历是和树的遍历类似,我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点都仅仅被访问一次,这一过程就叫做图的遍历(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,我打赌你肯定会走乱的,因为你没有一个准确的方案.
- 如果让你选择这样一套方案,从开始的房间走向一个相邻的房间,然后以该房间为起点找走到下一个相邻的房间,直到无路可走(与当前房间相邻的房间都被访问过),然后回到上一个房间看看与它相邻的房间是否访问过,如果有,就走向这个相邻的房间,如果没有,就回到上上一个房间看看与它相邻的房间是否访问过,重复上述过程,直到全部房间被访问完全为止。
类似于树的前序遍历