图-----深度优先遍历(DFS)

原理:

DFS是从每一个顶点开始的深度优先遍历,结果都是对该分支路径深入遍历到不能再深入为止,且每个顶点只能被访问一次。

具体实现是:

从图G中某个顶点v出发,先访问该结点,然后依次沿着未访问过的v的邻接顶点进行深度优先遍历,直到图G中和顶点v之间有相连路径的其他顶点都被访问过为止;此时,如果图G中还有其他顶点未被访问过,则从这些顶点中任选一个作为起始顶点,重复上述过程,直到图G中所有顶点都被访问过为止。

//数组visited代表顶点访问情况,访问过的为1,未访问的为0
int visited[N];
void DFS(Graph G, int v)
{
	visited[v] = 1;
//Visit()代表对顶点的访问
	Visit(v);
//函数FirstAdjvex(G,v)返回图G中v的第一个邻接点,NextAdjvex(G,v,w)返回v的(相对于w)的下一个邻接点
//若w是v的最后一个邻接点,则返回空;
	for (w = FirstAdjvex(G, v);w >= 0;w = NextAdjvex(G, v, w))
	{
		if (!visited(w))
		{
			DFS(G, w);
		}
	}
}


void DFSSearch(Graph G)
{
	int i;
	for (i = 0;i < G.vexnum;++i)
		visited[i] = 0;
	for (i = 0;i < G.vexnum;++i)
	{
//对未访问过的结点调用DFS
		if (!visited[i])
		{
			DFS(G, i);
		}
	}
}

 

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/weixin_39916039/article/details/81811470
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞