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

本文介绍了连通图的深度优先遍历(DFS)算法,并详细解释了基于邻接矩阵和邻接表两种不同数据结构实现DFS的具体过程。通过对比两种实现方式,分析了它们各自的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 为无向图中边的数目或有向图中弧的数目。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值