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);
              }
       }
}


 

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值