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