zoukankan      html  css  js  c++  java
  • 图的遍历深度遍历和广度遍历

    图的深度遍历(类似于树的先跟遍历)

    设初始状态图中所有的结点都没有遍历过。

    深度遍历可以从某个顶点v出发,访问v顶点,然后依次从v的未访问的邻接顶点出发深度遍历图,直到图中所有和v有路径相通的顶点都被访问过。

    伪代码如下:(运用的是邻接表存储)

    DFS(Graph G,int v)
     1 void DFS(Graph G ,int v){
    2
    3 visited[v]=true;VisitFunction(v);
    4
    5 for(w = FirstAdjVex(G,v);w;w=NextAdjVex(G,v,w)){
    6
    7 if(!visited[w]) DFS(G,w);
    8
    9 }
    10
    11 }

    在推广下,上面的深度遍历是建立在所给的图为连通图,如果所给的图不连通,那么算法得加上下面的代码:

    View Code
    1 for(v=0;v<G.vexnum;v++){
    2
    3 if(!visited[v]) DFS(G,v);
    4
    5 }

    也就是说只要将每个没有被访问的顶点都进行一次深度遍历即可。

    ----------------------------------------------------------------我是分割线----------------------------------------------------------------------------------------------

    图的广度遍历(类似于树的层次遍历)

    同样设初始状态图中所有的结点都没有遍历过

    由于同树的层次遍历类似因此需要一个队列来保存跟的所有孩子。

    算法如下:

    假设从图中的某个顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发访问他们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至所有顶点都被访问。

    换句话说 广度优先遍历的过程是:以v为起始点,由近到远,依次访问和v由路径相连通且路径长度为1,2,.....的顶点。

    伪代码如下:(运用的是邻接表存储)

    BFS(Graph G,int v)
     1 void BFS(Graph G,int v){
    2
    3/*初始化visited数组*/
    4
    5 ​ EnQueue(Q,v);
    6
    7while(!QueueEmpty()){
    8
    9 ​ ​ DeQueue(Q,u);
    10
    11 ​ ​ visited[u]=true; VisitFunction(u);
    12
    13 ​ ​ //将u结点的所有没有被访问的邻接点都进队列
    14
    15 ​ ​ for(w = FirstAdjVex(G,v);w;w=NextAdjVex(G,v,w)){
    16
    17 ​ ​ ​ if(!visited[w]) EnQueue(w);
    18
    19 ​ ​ }
    20
    21 ​ }
    22
    23 }

    同理上面只针对连通图,对于非连通图要加上下面的代码

    View Code
    1 for(v=0;v<G.vexnum;v++){
    2
    3if(!visited[v]) BFS(G,v);
    4
    5 }

  • 相关阅读:
    linux查看CPU和内存信息
    linux yum命令详解
    查看文件中关键字前后几行的内容
    vue.js+web storm安装及第一个vue.js
    android GPS: code should explicitly check to see if permission is available
    ASP.NET MVC Identity 使用自己的SQL Server数据库
    阿里云服务器,tomcat启动,一直卡在At least one JAR was scanned for TLDs yet contained no TLDs就不动了
    ASP.NET MVC4 MVC 当前上下文中不存在名称“Scripts”
    python 将windows字体中的汉字生成图片的方法
    Java android DES+Base64加密解密
  • 原文地址:https://www.cnblogs.com/hankskfc/p/2192843.html
Copyright © 2011-2022 走看看