首页 > 代码库 > 算法题——图的深度优先遍历
算法题——图的深度优先遍历
原理和方法可以参考: 图的深度优先遍历
教科书上的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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。