图算法(一)——基本图算法(BFS,DFS及其应用)(2)
2014-11-26 22:03
134 查看
2)DFS
深度优先搜索总是对最近发现的节点v的出发边进行搜索,直到该节点的所有出发边都被发现
一旦节点v的所有出发边都被发现,搜索回溯到v的前驱结点进行
实现细节:时间戳
每一个结点有一个发现时间和完成时间
DFS后原图的前驱子图构成一个深度优先森林
深度优先搜索总是对最近发现的节点v的出发边进行搜索,直到该节点的所有出发边都被发现
一旦节点v的所有出发边都被发现,搜索回溯到v的前驱结点进行
实现细节:时间戳
每一个结点有一个发现时间和完成时间
DFS后原图的前驱子图构成一个深度优先森林
#include<iostream> using namespace std; #define NIL -1 int g[1000][1000]; int n; struct Node { int color; int d; int f; int pi; }t[1000]; int time; void DFS(); void DFS_VISIT(int u); void DFS() { for (int i=0;i<n;i++) { t[i].color = 0; t[i].pi = NIL; } time=1; for (int i=0;i<n;i++) { if (t[i].color == 0) DFS_VISIT(i); } } void DFS_VISIT(int u) { t[u].d = time++; t[u].color = 1; /*****/ for (int v=0;v<n;v++) { if ((g[u][v] == 1)&&(t[v].color == 0)) { t[v].pi = u; DFS_VISIT(v); } } t[u].f = time++; } /* int main() { while (cin>>n) { for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { cin>>g[i][j]; } } DFS(); for (int i=0;i<n;i++) cout<<i<<" "<<t[i].d<<" "<<t[i].f<<" "<<endl; } return 0; } */
相关文章推荐
- 图算法(一)——基本图算法(BFS,DFS及其应用)(1)
- 图的基本算法(BFS和DFS)转载自https://www.jianshu.com/p/70952b51f0c8
- 图的基本算法(BFS和DFS)
- 图的基本算法(BFS和DFS)
- 啊哈算法搜索应用之宝岛探险(BFS和DFS)
- 图的基本算法(BFS和DFS)
- 啊哈算法搜索应用之再解炸弹人(DFS与BFS)
- 图的点着色、区间着色问题及其应用(基于贪心思想的DFS回溯法求点着色问题和区间着色算法求解任务调度问题)
- 图的基本算法(BFS和DFS)
- 图的基本算法(BFS和DFS)
- 图的基本算法--深度优先搜索(dfs) 和 广度优先搜索(bfs)
- 基本算法DFS以及BFS
- 二、基本算法之DFS、BFS和A*
- 基本图算法: BFS和DFS---shortest path和topological sort
- RANSAC算法及其消除错配应用
- 传智播客-ejb3(2)-bean类型、jboss基本应用、本地组件和远程组件及其底层实现原理简介
- 各种基本算法实现小结(四)—— 图及其遍历
- 经典算法研究系列:四、教你通透彻底理解:BFS和DFS优先搜索算法
- 动态规划(DP)算法及其应用
- RANSAC算法及其消除错配应用