算法题——图的深度优先遍历
原理和方法可以参考: 图的深度优先遍历
教科书上的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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端