1004. 无环图
来源:互联网 发布:淘宝发顺丰要补多少钱 编辑:程序博客网 时间:2024/06/05 18:18
在图论中,如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是一个有向无环图(Directed Acyclic Graph,DAG). 对于一个n个节点的有向图(节点编号从0到n-1),请判断其是否为有向无环图.
图的节点数和边数均不多于100000.
请为下面的Solution类实现解决上述问题的isDAG函数,函数参数中n为图的节点数,edges是边集,edges[i]表示第i条边从edges[i].first指向edge[i].second. 如果是有向无环图返回true,否则返回false.
#include <vector>#include <iostream>#include <utility>#include <cstring>using namespace std;class Solution {public: vector<vector<int> > V; vector<int> visited; bool DFS(int u) { visited[u] = 1; // visited in this cycle for (int i = 0; i < V[u].size(); i++) { int v = V[u][i]; if (visited[v] == 1) { return false; } else if (!visited[v] && !DFS(v)){ return false; } } visited[u] = 2; // have visited head vertex return true; } bool isDAG(int n, vector<pair<int, int> >& edges) { V.resize(n); visited.resize(n); int u, v; for (int i = 0; i < edges.size(); i++) { u = edges[i].first; v = edges[i].second; V[u].push_back(v); } for (int i = 0; i < n; i++) visited[i] = 0; for (int i = 0; i < n; i++) if (!visited[i] && !DFS(i)) return false; return true; }};int main() { pair<int, int> a[] = {{2, 1}, {0, 2}, {1,0}, {2,3}}; std::vector<pair<int, int> > edges (a, a+sizeof(a)/sizeof(a[0])); //cout << edges[0].first << endl; //cout << edges[1].first << endl; Solution s; cout << s.isDAG(5, edges); return 0;}
阅读全文
0 0
- 1004. 无环图
- 1004.无环图
- 1004. 无环图
- 【Sicily】1004. 无环图
- 算法期中1004. Kahn算法求解有向无环图拓扑排序
- 【1004】无环图
- 1004. 奖金
- 1004.Median
- 1004. Hashing
- 1004. 成绩排名
- 1004. 成绩排名
- 1004. 成绩排名
- 1004.成绩排名
- 1004. 成绩排名
- 1004. 成绩排名
- 1004. 成绩排名
- 1004. 成绩排名
- 1004. 成绩排名
- mybatis的#{}和${}的区别以及order by注入问题(转录)
- php导出 excel文件 实现方式
- 数据更新、事务处理、数据伪列
- Android虚线不显示
- Retrofit2+Rxjava2联网的封装
- 1004. 无环图
- Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站
- JNI转换通俗易懂的总结(Java调用C++篇)
- FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)——读完清晰明了
- 初识UML(一)
- JQuery事件-6.29
- mysql5.7安装过程中出现的错误--无法定位程序输入点 于动态链接库
- mobile safari 下overflow:auto的解决方法
- Linux ls 命令 详解