图的遍历
图的遍历是从图中某个结点出发遍历图,访遍图中其余项点,并且使图中的每个顶点仅被访问一次的过程。
深度优先搜索
深度优先搜索基本思想:
- 从图中某个顶点V0出发,首先访问V0;
- 找出刚访问过的顶点的第一个未被访问的邻接点,然后访问该结点。以该顶点为新顶点,重复此步骤,直到刚访问过的顶点没有未被访问的邻接点为止;
- 返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该顶点的下一个未被访问的邻接点,访问该顶点。然后执行步骤2.
若是非连通图,则图中一定还有顶点未被访问,要从图中另选一个未被访问的顶点作为起始点,重复上述过程。
例如:
深度优先算法的实现过程:
- 访问出发点V0;
- 依次以V0的未被访问的邻接点为出发点,深度优先搜索图,直至图中所有与V0有路径相通的顶点都被访问。
对于非连通图,则图中一定还有顶点未被访问,要从图中另选一个未被访问的顶点作为起始点,重复上述深度优先搜索过程。
深度优先搜索代码实现
深度优先遍历V0所在的连通子图:
void DepthFristSearch(Graph g,int V0)
{
visit(V0);
visited[V0]=true;
w=FirstAdjVertex(g,V0); //V0的第一个邻接点
while(w!=-1){
if(!visited[w])
DepthFristSearch(g,w);<