数据结构(二) 深度优先遍历 DFS

1、连通图的深度优先遍历算法思想 DFS
(1) 、访问初始顶点V并标记顶点V已访问。
(2) 、查找顶点V的第一个邻接顶点W。
(3) 、若顶点V的邻接顶点W存在,则继续执行,否则回溯到V,再找V的另外一个未访问过的邻接节点。
(4) 、若顶点W未被访问,则访问顶点W并标记顶点W已被访问。
(5) 、继续查找顶点W的下一个临界顶点W,如果V取值Wi转到步骤(3),直到连通图中所有顶点全部访问过为止。

 

(1)邻接矩阵的深度优先遍历算法
void AdjMWGraph::Depth(int V ,int visited[])
{
	cout<<"顶点 "<<V+1<<"权值"<<Vertices[v];
	visited[v]=1;
	for(int col=0;col<numV;col++)
	{
		if(Edge[v][col]==0 || Edge[v][col]==MaxWeight)
		{
			continue;	
		}
		if(!visited[col])
		{
			Depth(col,visited);
		}
	}
}
用邻接矩阵表示图时,搜索一个顶点的所有邻接点需花费O(n)时间,
则从n个顶点出发搜索的时间应为O(n^2),即DFS算法的时间复杂度是(n^2)

(2)邻接表的深度优先遍历算法
Void AdjTWGraph::Depth(int V ,int visited[])
{
	int vj,Edge*p;
	cout<<"Vertices[v].data<<" ";
	visited[v]=1;
	p=Vertices[v].adj;
	while(p!==NULL)
	{
		vj=p->dest;
		if(visited[vj]==0 )
		{
			Depth(vj,visited);
		}
		p = p->next;
	}
}

使用邻接链表来表示图时,其 DFS 算法的时间复杂度为 O(n+e) ,
此处 e 为无向图中边的数目或有向图中弧的数目。 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值