图的两种遍历方法

本文介绍了图的两种遍历方法,包括深度优先遍历(DFS)和广度优先遍历(BFS)。深度优先遍历从初始顶点开始,沿着路径一直访问直到无邻接点可访问,再回溯;而广度优先遍历则是逐层横向访问邻接点。这两种遍历方法在非连通图中可能需要多次从未访问顶点开始以确保所有顶点都被访问到。

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

图的遍历

图的遍历是指,从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历。

图的遍历过程根据搜索方法的不同,又可划分为两种搜索策略

1.深度优先遍历
2.广度优先遍历

算法思想

1.深度优先遍历(dfs)

深度优先遍历的步骤

  • 访问顶点V
  • 依次从顶点V的未被访问的邻节点出发,进行深度优先搜索,直至和V有路径相通的顶点都被访问到。
  • 对于连通图进行遍历时,从一个顶点出发即可访问图中所有的顶点。
  • 对于非连通图进行遍历时,若图中尚有顶点未被访问,则另选一未曾访问的顶点作为起始点,进行深度优先搜索,直至所有顶点都被访问

访问过程如图所示
在这里插入图片描述
遍历结果:v1,v2,v4,v8,v5,v3,v6,v7,v9,v10

2.广度优先遍历

从顶点V出发广度优先搜索的步骤

  • 访问顶点V
  • 依次访问顶点V的各个未被访问的临接点(横向访问)
  • 从V的这些邻接点出发依次访问他们的邻接点,致使“先被访问的顶点的邻接点先于"后访问的顶点的邻接点"被访问,直至图中所有已被访问的顶点的邻接点均被访问。
  • 对于非连通图进行遍历时,若图中尚有顶点未被访问,则另选一未曾访问的顶点作为起始点,进行广度优先搜索,直至所有顶点都被访问
    遍历的过程:
    在这里插入图片描述
    遍历的结果:V1,V2,V3,V4,V5,V6,V7,V8,V9,V10

具体代码实现:

//深度优先搜索(DFS)
void DFS(AMGraph G, int v){
cout<<G.vex[v];
visit[v]=1;
for(j=0;j<G.vexnum;j++){
if(G.arcs[v][j]&&!visited[j]) DFS(G,j)
    }
}
void DFSTraverse(AMGraph G){
for(v=0;v<G.vexnum;v++) 
   visited[v]=0;
   for(v=0;v<G.vexnum;v++)
   if(!visited[v])DFS(G,v);
}



//广度优先搜索(BFS)
void BFSTracerse(AMGraph G){
for(v=0;v<G.vexnum;v++) visited[v]=0;
InitQueue(Q);
for(v=0;v<G.vexnum;v++){
     if(!visited[v])
     {
     cout<<G.vexs[v];  
     visited[v]=1;
     EnQueue(Q,v);
     while(!QueueEmpty(Q)){
     DeQueue(Q,u);
     for(j=0;j<G.vexnum;j++){
         if(G.arcs[u][j]==1&&!visited[j])
            {
                  cont<<G.vexs[j];
                  visited[j]=1;
                  EnQueue(Q,j);
                  }
                }
            }
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值