图的遍历是指从图的某一个顶点出发,按照某种方法沿着边对图中的顶点全部访问一次。
ps:树是一幅无环连通图。互不相连的树组成的集合 称为森林。
连通图的生成树是它的一幅子图,它含有图中所有顶点且是一棵树。
当且仅当一幅含有V个结点的图G满足下列五个条件之一时,他就是一棵树:
1 G有V-1条边且不含有环。
2 G有V-1条边且是连通的。
3 G是连通的,且删除任意一条边都会使它不再连通。
4 G是无环图,但添加任意一条边都会产生一条环。
5 G中的任意一对顶点之间仅存在一条简单路径。
深度优先搜索(DFS)的思想:
以图的某个顶点V开始,访问V的邻接顶点w1,再访问w1的邻接顶点n1,直到当前所访问的顶点的所有邻接顶点都被访问过了,然后回退到最近被访问的顶点,如果该顶点还有未被访问的点,则从改点继续搜索,否则继续回退,直到回退到v。
深度优先搜索中每条边都会被访问两次,且第二次访问时总会发现这个顶点已经被访问过。
此处使用邻接表表示图,
C++代码实现如下:
//DFS.cpp
//有向图
#include <iostream>
#include <list>
using namespace std;
class Graph
{
int count = 0;//顶点数
list<int> *adj; //邻接表
void DFSUtil(int v, bool visited[]);
public:
void addEdge(int v, int w); //向图中添加边
void DFS(int v); //深度优先搜索函数接口
Graph(int count);
};
Graph::Graph(int count)
{
this->count = count;
adj = new list<int>[count];
}
void Gra

本文介绍了图的深度优先搜索算法(DFS),重点在于理解DFS的思想及C++实现。从某顶点开始,访问其邻接顶点,直至所有邻接顶点都被访问,再回退并继续搜索,直至所有顶点都被访问。DFS在无环连通图中,每条边会被访问两次。文章提供了基于邻接表的C++代码示例。
最低0.47元/天 解锁文章
1164

被折叠的 条评论
为什么被折叠?



