图的遍历,非递归版本,深度优先遍历
来源:互联网 发布:网络配音培训班 编辑:程序博客网 时间:2024/05/16 15:52
UndirectedGraphNode 为图节点, label 存储节点数据, visited 表示节点是否已被访问过, neighbors 表示相连接的节点。
利用 stack 实现对图的深度遍历,stack 由 list 的 back(), push_back(), pop_back 方法实现。
遍历思路: 将第一个节点压入 stack_node 中, stack_node.back() 表示当前访问的节点。
若存在尚未访问的邻接节点,则将其压入 stack_node 中,标记为已访问,并将新压入的这个节点作为当前节点,继续探索。
若不存在尚未访问的邻接节点,则弹出当前节点,将 stack_node 的下一个节点作为当前节点,继续探索。
执行上面两个检测,直到 stack_node 全部弹出,则表示全部节点已被访问过。遍历完成。
struct UndirectedGraphNode {int label;bool visited = false; vector<UndirectedGraphNode *> neighbors; UndirectedGraphNode(int x) : label(x) {};};/** * 非递归版本,遍历图的所有节点,深度优先遍历 * */void visited_non_recusive(UndirectedGraphNode* node){list<UndirectedGraphNode*> stack_node;stack_node.push_back(node);print_node(node);node->visited = true;UndirectedGraphNode* tmp;UndirectedGraphNode* iter_tmp;while (stack_node.size() > 0) {tmp = stack_node.back();int i = 0;for ( ; i < tmp->neighbors.size(); i++) {iter_tmp = tmp->neighbors[i];if (iter_tmp->visited == false) {print_node(iter_tmp);iter_tmp->visited = true;stack_node.push_back(iter_tmp);break;}}if (i == tmp->neighbors.size()) {stack_node.pop_back();}}}
1 0
- 图的遍历,非递归版本,深度优先遍历
- 深度优先遍历算法的非递归
- 树的非递归深度优先遍历
- 深度优先遍历的非递归
- 非递归深度优先遍历
- 图的深度优先遍历(递归与非递归算法)和广度优先遍历
- 【数据结构】邻接矩阵表示法的图的深度广度优先遍历递归和非递归遍历
- 【数据结构】邻接矩阵表示法的图的深度广度优先遍历递归和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历、图的深度优先和广度优先遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历、图的深度优先和广度优先遍历
- 二叉树的深度优先遍历(递归、非递归),广度优先遍历(递归)
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 第二阶段 软件测试管理概述
- 汉明距离
- leetcode Binary Tree Inorder Traversal
- hihocoder #1091
- 敏捷开发
- 图的遍历,非递归版本,深度优先遍历
- Myeclipse中设置maven以及maven项目的导入
- Web分页技术的思想汇集
- LIntCode-二进制求和
- php开发日记之数据库连接
- 今天面试了两个程序猿(二)
- POJ - 2251 Dungeon Master(15.10.10 搜索专题)bfs
- HDU 4772 Zhuge Liang's Password 2013杭州现场赛
- 电脑全屏闪回桌面问题