首页 > 其他 > 详细

算法题——图的深度优先遍历

时间:2014-08-17 03:44:27      阅读:354      评论:0      收藏:0      [点我收藏+]

原理和方法可以参考: 图的深度优先遍历 

教科书上的C代码,递归

 1 //教科书方法,邻接表
 2 bool visited[MAX];
 3 void visitFunc(int v);
 4 
 5 void dfsTraverse(Graph G)
 6 {
 7     for(v = 0; v < G.vexnum; ++v)   //初始化访问标识为false
 8         visited[v] = false;
 9     for(v = 0; v < G.vexnum; ++v)   //深搜
10         if(!visited[v])
11             dfs(G, v);
12 }
13 
14 void dfs(Graph G, int v)
15 {
16     visited[v] = true;
17     visitFunc(v);
18     for(w = firstAdjVex(G, v); w; w = nextAdjVex(G, v, w))  //遍历邻接表
19         if(!visited[w])
20             dfs(G, w);
21 }

 

迭代版:

 1 //使用堆栈来保持顺序,迭代
 2 void dfsTraverse(GraphNode *G)
 3 {
 4     unordered_map<GraphNode *, bool> visited;
 5     stack<GraphNode*> unvisited;
 6     unvisited.push(G);          //第一个结点入栈
 7     while( !unvisited.empty() )
 8     {
 9         cur = unvisited.top();
10         unvisited.pop();
11 
12         for(w = G.neighbor; w != NULL; w = w->next)      //遍历邻接表
13             if( visited.find(w->Node) == visited.end() )
14             {
15                 unvisited.push(w->Node);
16                 visited[w->Node] = true;
17             }
18 
19         visitFunc(cur);
20     }
21 }

 

算法题——图的深度优先遍历,布布扣,bubuko.com

算法题——图的深度优先遍历

原文:http://www.cnblogs.com/qieerbushejinshikelou/p/3917292.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!