DFS深度优先遍历算法简单分析

一般在涉及图论的算法题的时候都会用到遍历有关方面的思想!而DFS也是最常用的一种方法,下面简单地DFS算法作下简单的分析

DFS基本思想:DFS是一个递归的过程(当然也可以不用递归,而且效率更高,但是递归让我们更加容易理解,应用更加方便) 也是一个有回退的过程,对于一个无向连通图,访问图中某个顶点v0后,然后访问它的某一个邻接顶点v1,然后再从v1出发,访问v1的未访问过的邻接顶点(需要一个isVisited数组),如此下去,直至到达所有的领接顶点都被访问过。然后回退一步,回到前一次被访问的顶点,看是否还有没有访问的顶点,如果有,则从这个顶点出发,进行向上述的过程一样进行访问,如果没有,则再回退一步,进行类似的访问,直至所有的顶点都被访问为止!

DFS主要的数据结构有邻接表和临街矩阵

邻接矩阵数据结构 edge[ max ][ max ]

临街矩阵的数据结构vector<vector<int> > edge; 或 更高级的 map<string, vector<string> > edge; 下标为非整型

实现的伪代码:

1.如果图是用邻接表存储

dfs(顶点i)

    {
        visited[i]=1;
        //p是i的边链表表头指针
         while(p非空)
        {
               if(i顶点对应的另一个顶点没有被访问过,设为k)
             {
                    //递归搜索前要准备的工作的代码在这些
                     dfs(k);
                    //回退过程中,应该在这里写代码!
             }
         p=p->next;
      } 

2 如果图是用邻接矩阵存储

 dfs(顶点i)
   {
        visited[i]=1;
        for(j=0;j<n;j++)
        {    if(edge[i][j]<inf&&visited[j]!=1) //如果i到k之间有边链接,并且j没有被访问过
              {  dfs(j);
              }
       }
}

 

能力有限 仅做参考 若有错误 多多指教!!

 

    原文作者:DFS
    原文地址: https://blog.csdn.net/matrixa17/article/details/19616209
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞