DFS 深度优先搜索
来源:互联网 发布:贤者之爱结局知乎 编辑:程序博客网 时间:2024/05/01 09:41
http://hi.baidu.com/gropefor/blog/item/3a00b683115b4f98f603a61f.html
深度优先搜索算法需要了解深度优先遍历的执行过程,本文中利用一个栈来模拟递归实现中系统设置的工作栈,算法的伪代码描述为:
(1)初始化栈
(2)输出起始节点,并标记为已访问,将该节点压入栈
(3)While(栈不为空)
a.取得栈顶节点Top,注意不要从站内删除;
b.遍历栈顶节点Top的相邻节点adjacentNode,如果该节点adjacentNode未被标记为已
访问,则
输出节点adjacentNode;
标记adjacentNode为已访问;
把adjacentNode压入栈;
c.如果没有满足条件的相邻节点adjacentNode,将栈顶节点Top出栈;
使用情形:
1.深度优先策略常用于连通图的遍历
2.深度优先策略也广泛应用于寻找一条满足某种条件的路径。
算法的时间复杂度为O(n),其中n为节点个数。
经典实例源码:
1.图的节点遍历(C++,VC6.0/VS2005)=================================================
//////////////////////////////////
//深度优先之节点遍历
//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()) //这里知道图的节点数的话可以用while(--n),可以避免遍历完毕后程序继续回溯 { 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(); system("pause"); return 0;}
- 深度优先搜索 DFS
- 深度优先搜索 DFS
- DFS 深度优先搜索
- DFS 深度优先搜索
- 深度优先搜索(DFS)
- 深度优先搜索(DFS)
- 深度优先搜索DFS
- DFS深度优先搜索
- 深度优先搜索(DFS)
- dfs深度优先搜索
- dfs 深度优先搜索
- 深度优先搜索(DFS)
- 深度优先搜索DFS
- DFS深度优先搜索
- 深度优先搜索(DFS)
- 深度优先搜索DFS
- 深度优先搜索(DFS)
- 深度优先搜索--DFS
- 无线路由器不能产生信号
- 无向网最小生成树 prim算法 和 kruskal算法
- Windows错误:堆被损坏
- mysql注入问题
- Asp.net MVC 中Controller返回值类型ActionResult
- DFS 深度优先搜索
- quartus虚拟按键生成
- 虚伪的世界我要一个家...
- PostgreSQL启动过程中的那些事六:初始化SSL链接相关库
- 《那些年啊,那些事——一个程序员的奋斗史》——60
- 搜索算法-讲解[八皇后问题]
- jdbc学习记录
- 【实践】令人头疼的大小写命名规则---CakePHP编程纪实
- 几个最短路径算法比较