图的遍历是指从图的某一个顶点出发,按照某种方法沿着边对图中的顶点全部访问一次。
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