图的基础知识(二)——深(广)度优先遍历

本文介绍了图的深度优先遍历和广度优先遍历。深度优先遍历从某个顶点出发,访问其未访问的邻接点,直到所有可达顶点都被访问;广度优先遍历则按层次顺序访问,使用队列确保访问顺序。两种遍历方法在非连通图中需多次起始以访问所有顶点,时间复杂度相同。
摘要由CSDN通过智能技术生成

图的深度优先遍历

深度优先搜索基本思想

  1. 从图中某个顶点V0出发,首先访问V0
  2. 找出刚访问过的顶点的第一个未被访问的邻接点,然后访问该顶点。以该顶点为新顶点,重复此步骤,直到刚访问过的顶点没有未被访问的邻接点为止;
  3. 返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该顶点的下一个未被访问的邻接点,访问该顶点,然后执行步骤2。
    若是非连通图,则图中一定还有顶点未被访问,要从图中另选一个未被访问的顶点作为起始点,重复上述过程。

例如,连通图:
大致流程是这样的:先访问一个顶点,然后访问它的一个邻接点,然后继续访问邻接点的邻接点,直到这一条没有邻接点为止。然后回溯,查看是否每个结点的邻接点都被访问过,没有则访问,直到最后访问到I。还没有结束,再从I开始回溯,检查每个结点是否被访问,直到A结束。
在这里插入图片描述

深度优先算法的实现过程

  1. 访问出发点V0
  2. 依次以V0的未被访问的邻接点为出发点,深度优先搜索图,直至图中所有与V0有路径相通的顶点都被访问。
    对于非连通图,则图中一定还有顶点未被访问,要从图中另选一个未被访问的顶点作为起始点,重复上述深度优先搜索过程。

深度优先遍历V0所在的连通子图:

void DepthFirstSearch(Graph g,int V0){
   //V0出发点 
	visit(V0);//访问出发点 
	visited[V0]=True;
	w=FirstAdjVertex(g,V0);//找邻接点 
	while(w!=-1){
   //邻接点未被访问过 
		if(!visited[w]) DepthFirstSearch(g,w);//进行DFS 
		w=NextAdjVertex(g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值