图-----深度优先遍历(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);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值