算法分析---------------------DFS算法
2013-08-20 23:10
190 查看
深度优先搜索算法(转)
深度优先搜索算法需要了解深度优先遍历的执行过程,本文中利用一个栈来模拟递归实现中系统设置的工作栈,算法的伪代码描述为:
(1)初始化栈
(2)输出起始节点,并标记为已访问,将该节点压入栈
(3)While(栈不为空)
a.取得栈顶节点Top,注意不要从站内删除;
b.遍历栈顶节点Top的相邻节点adjacentNode,如果该节点adjacentNode未被标记为已
访问,则
输出节点adjacentNode;
标记adjacentNode为已访问;
把adjacentNode压入栈;
c.如果没有满足条件的相邻节点adjacentNode,将栈顶节点Top出栈;
使用情形:
1.深度优先策略常用于连通图的遍历
2.深度优先策略也广泛应用于寻找一条满足某种条件的路径。
算法的时间复杂度为O(n),其中n为节点个数。
深度优先搜索算法需要了解深度优先遍历的执行过程,本文中利用一个栈来模拟递归实现中系统设置的工作栈,算法的伪代码描述为:
(1)初始化栈
(2)输出起始节点,并标记为已访问,将该节点压入栈
(3)While(栈不为空)
a.取得栈顶节点Top,注意不要从站内删除;
b.遍历栈顶节点Top的相邻节点adjacentNode,如果该节点adjacentNode未被标记为已
访问,则
输出节点adjacentNode;
标记adjacentNode为已访问;
把adjacentNode压入栈;
c.如果没有满足条件的相邻节点adjacentNode,将栈顶节点Top出栈;
使用情形:
1.深度优先策略常用于连通图的遍历
2.深度优先策略也广泛应用于寻找一条满足某种条件的路径。
算法的时间复杂度为O(n),其中n为节点个数。
/* * main.cpp * * Created on: 2013-8-20 * Author: 白强 */ //源码的修改 ////////////////////////////////// //深度优先之节点遍历 //1---5 //| | //2---4--6----8 //| | //3------7 // 1 2 3 4 5 6 7 8 //1 0 1 0 0 1 0 0 0 //2 1 0 1 1 0 0 0 0 //3 0 1 0 0 0 0 1 0 //4 0 1 0 0 1 1 0 0 //5 1 0 0 1 0 0 0 0 //6 0 0 0 1 0 0 1 1 //7 0 0 1 0 0 1 0 0 //8 0 0 0 0 0 1 0 0 #include <iostream> #include <stack> using namespace std; //节点数 #define M 8 //图的矩阵表示 int matrix[M][M] = { 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }; //访问标记,初始化为0, int visited[M + 1]; //graph traverse void GT_DFS() { visited[1] = 1; stack<int> s; cout << 1 << " "; s.push(1); while (!s.empty()) { int top = s.top(); int i; for (i = 1; i <= M; ++i) { if (visited[i] == 0 && matrix[top - 1][i - 1] == 1) { visited[i] = 1; s.push(i); cout << i << " "; break; } } if (i == M + 1) { s.pop(); } } } int main() { GT_DFS(); //输出结果:1 2 3 7 6 4 5 8 return 0; }
相关文章推荐
- 算法的时间复杂度分析
- [原创]桓泽学音频编解码(1):MPEG1 MP3 系统算法分析
- 学习进度(2012-7-11)(红黑树、多线程、算法分析与设计、COM技术内幕)
- 线性判别分析(Linear Discriminant Analysis, LDA)算法分析
- [原创]桓泽学音频编解码(2):AC3/Dolby Digital 系统算法分析
- 递归树的算法分析
- 算法设计与分析题目练习五:求最大值(遗传算法)
- Ctorrent: 寻找peer 算法分析
- 时间序列分析算法【R详解】
- 循环赛算法分析
- 分类算法3----线性判别分析(LDA)原理和推导过程
- 从算法的角度分析ERP、APS与MES的关系
- Hamming Weight的算法分析(转载)
- C++ Primer 学习笔记_41_STL实践与分析(15)--先来看看算法【下一个】
- 主成分分析(pca)算法原理
- 【算法设计与分析】To the max
- 数学建模算法 一 简述(4)主成分分析(PCA)
- 计算机视觉CV 之 CMT跟踪算法分析一
- 【转载】WebRTC基于GCC的拥塞控制(上) - 算法分析
- 算法分析课每周练习 Wildcard Matching