DFS算法——ALDS1_11_B(日本AOJ)
2017-02-26 17:03
435 查看
作为大一屌丝宅男一名,没事刷刷acm还是不错的。
看书看到DFS算法,刚学不久,现学现卖
。
—————————————————————————————————分割线———————————————————————————————————————
接下来是正文。
u k v1 v2 ... vk
1 2 2 3
2 2 3 4
3 1 5
4 1 6
5 1 6
6 0
2 2 11
3 3 8
4 9 10
5 4 7
6 5 6
代码如下:
看书看到DFS算法,刚学不久,现学现卖
。
—————————————————————————————————分割线———————————————————————————————————————
接下来是正文。
输入:第一行输入G的顶点数n,接下来n行按如下格式输入各顶点u的邻接表。
u k v1 v2 ... vk
其中u是顶点编号,k是u的度,v是与u相邻的顶点编号。
输出:按顶点编号顺序输出各顶点的id、d、f,每个顶点占一行,id、d、f之间用空格隔开。id为顶点编号,d为该定点的发现时刻,f为该定点的结束时刻。
限制:1<=n<=100
输入示例:
61 2 2 3
2 2 3 4
3 1 5
4 1 6
5 1 6
6 0
输出示例:
1 1 122 2 11
3 3 8
4 9 10
5 4 7
6 5 6
代码如下:
#include<iostream> #include<stack> #include<algorithm> using namespace std; static const int N = 100; static const int WHITE = 0; static const int GRAY = 1; static const int BLACK = 2; int n,M ; int color ,d ,f ,tt; int nt ; //按编号获取相邻编号 int next(int u) { for( int v = nt[u]; v < n ;v++) { nt[u] = v + 1 ; if( M[u][v] ) return v; } return -1; } //用栈实现的深度优先搜索 void dfs_visit(int r) { for( int i = 0;i<N;i++) nt[i]=0; stack<int> S; S.push(r); color[r] = GRAY; d[r]=++tt; while( !S.empty() ) { int u = S.top(); int v = next(u); if( v != -1) if(color[v]==WHITE) { color[v]=GRAY; d[v]=++tt; S.push(v); } else { S.pop(); color[u]=BLACK; f[u]=++tt; } } } void dfs() { //初始化 for(int i= 0;i<n;i++) { color[i]=WHITE; nt[i]=0; } tt=0; //以为访问的u为起点开始遍历 for(int u=0;u<n;u++) { if(color[u]==WHITE) dfs_visit(u); } for(int i=0;i<n;i++) { cout<<i+1<<" "<<d[i]<<" "<<f[i]<<endl; } } int main() { int u,v,k; cin>>n; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) M[i][j]=0; } for(int i=0;i<n;i++) { cin>>u>>k; u=u-1; for(int j=0;j<n;j++) { cin>>v; v=v-1; M[u][v]=1; } } dfs(); return 0; }
相关文章推荐
- 算法总结(11)--伪递归,dfs,动态规划题,需要转换下思路
- [转]【啊哈!算法】算法11:堆——神奇的优先队列(上)--作者:ahalei
- 开开心心学算法--深度优先搜索(DFS)之滑雪问题
- hdu 1312 DFS算法简单题
- 图的DFS和BFS算法解析
- 图的DFS和BFS算法解析
- 算法练习-- C# DFS 全排列算法
- 图的邻接矩阵和邻接表存储的深度优先遍历(DFS)算法实现
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)
- 算法每日一题:11、填数
- ALGO-11算法训练 瓷砖铺放(递归)
- 图的BFS、DFS算法实现
- 【匈牙利算法】匈牙利模板dfs、bfs
- oc-------体彩11选五算法
- 图的基本算法(BFS和DFS)
- poj1753解题报告(1):DFS算法
- 普林斯顿公开课 算法1-11:并查集的应用
- 207. Course Schedule 图的dfs算法
- 深度优先搜索(DFS)算法