关于DFS,BFS
来源:互联网 发布:netstat 端口状态 编辑:程序博客网 时间:2024/06/03 18:53
我发现这几个用的好多啊。。。。
- DFS
深度优先遍历,也就是遍历图或者数深度优先,感觉只要是个问题都要用到,一般问题都是问一条线,就是深度遍历一下就解决了吧。
#include <cstdio>#include <vector>#include <algorithm>using namespace std;vector<int> v[100];int book[100], maxdepth = -1;void dfs(int index, int depth) { if(v[index].size() == 0) { book[depth]++; maxdepth = max(maxdepth, depth); return ; } for(int i = 0; i < v[index].size(); i++) dfs(v[index][i], depth + 1);}int main() { int n, m, k, node, c; scanf("%d %d", &n, &m); for(int i = 0; i < m; i++) { scanf("%d %d",&node, &k); for(int j = 0; j < k; j++) { scanf("%d", &c); v[node].push_back(c); } } dfs(1, 0); printf("%d", book[0]); for(int i = 1; i <= maxdepth; i++) printf(" %d", book[i]); return 0;}
v相当于一个二维的数组,node表示节点,里面保存这个节点下面的叶子,深度优先也就是,选好一个初始节点开始,判断这个节点里面有没有叶子,如果有,就把叶子的节点记录放入函数重新深度优先遍历,深度depth+1,没有的话就跳出。
- BFS
宽度优先搜索算法(又称广度优先搜索),现在感觉用到的不多,初学小白,也没DFS熟悉。
#include <cstdio>#include <queue>#include <vector>#include <algorithm>using namespace std;int level[100], book[100], maxlevel = -1;vector<int> v[100];void bfs() { queue<int> q; q.push(1); level[1] = 0; while(!q.empty()) { int index = q.front(); q.pop(); maxlevel = max(level[index], maxlevel); if(v[index].size() == 0) book[level[index]]++; for(int i = 0; i < v[index].size(); i++) { q.push(v[index][i]); level[v[index][i]] = level[index] + 1; } }}int main() { int n, m, k, node, c; scanf("%d %d", &n, &m); for(int i = 0; i < m; i++) { scanf("%d %d",&node, &k); for(int j = 0; j < k; j++) { scanf("%d", &c); v[node].push_back(c); } } bfs(); printf("%d", book[0]); for(int i = 1; i <= maxlevel; i++) printf(" %d", book[i]); return 0;}
同样v这个类似于二维数组的记录所有的节点和叶子,首先把根节点1放进去q这个队列中去,第一层节点数为0,层数为maxlevel,level数组保存每一层的节点。然后开始判断队列q是否为空,不为空的话,把当前层数设置为q.front,就是最前面的一个数据,然后把其pop出去,这时候判断index这一层有没有节点,也就是q里面有没有数据,如果有,v[index]里面的数据全部push进队友,这时候队列里只有这一层的数据,然后继续遍历这些节点,有叶子就push进去,之后无论有没有都pop出去原来的节点,一层层就弄完了层序遍历。
阅读全文
0 0
- 关于BFS和DFS
- 关于DFS,BFS
- DFS/BFS 关于迷宫问题
- BFS-DFS
- BFS DFS
- DFS+BFS
- BFS DFS
- DFS BFS
- DFS & BFS
- BFS,DFS
- dfs bfs
- BFS&DFS
- DFS BFS
- BFS && DFS
- BFS DFS
- DFS & BFS
- DFS&BFS
- BFS&DFS
- springmvc常用注解标签详解
- 白话:服务降级与熔断的区别
- Mantis1.2.19 在Windows 平台上的安装配置详解
- openssl evp aes_128_cbc
- Structuring Machine Learning Projects总结
- 关于DFS,BFS
- 能猜结论这件事也很重要
- CDH优化
- 请求跨域处理
- 两句话掌握 Python 最难知识点:元类
- iw工具源码编译
- Error: The number of filter groups does not divide the total number of filters.
- Android RxJava 实战讲解:合并数据源 & 同时展示数据
- bootstrap验证