图---DFS

DFS是对图进行遍历的最基本的算法,前面将对树的遍历的时候,曾经讲过先序遍历,即根-左子树-右子树,这里DFS和先序遍历比较像。

DFS有两种写法:递归,迭代。

各有各的好处:递归写法比较简单,但是性能低一些; 迭代写法稍微复杂些,但是性能高一些。大家随情况进行抉择。

 

递归算法:

DFS(G,  v)
    visited[ v ] ← yes
    for  each all w in adjacency( G, v )
        IF  visited[w]  ≠  yes
            DFS(G, w)

 


 

迭代算法:

STACK s
visited[ ]
DFS(v)
     push( s, v )
     while not isEmpty( s ) 
              v ← pop(s)
              if not visited[v]
                   visit( v )
                   for each w in adjacency( v )
                      if not visited[w]
                                  push(s, w)

 


 

大家可以比较下DFS的迭代算法与BFS算法,步骤几乎一模一样,除了stack换成了queue

 

posted @ 2015-12-25 21:48  xfei.zhang  阅读(129)  评论(0编辑  收藏  举报