图论之各种找环
2015-09-17 17:46
344 查看
给我们一个有向图,找出长度为3的环,如果有的话,输出环上的三个点,如果没有,输出-1
因为只有三个点,所以可以暴力, 枚举两条边,判断第三条是不是存在即可。 fa -> u, u -> i, 判断g[i][fa]==1?
View Code
各种找环
START————————————————————————
无向图判断是否存在环
topoSort变种,将度<=1的点入队列,如果最后没有将所有的点入过队列,那么久存在环
无向图找长度为奇数或者长度为偶数的环。
首先,我们找到所有的点双联通分量,那么每个分量里面的点都在环上。那么而判断环是奇环还是偶环可以用二分图染色来判断,如果是奇环,那么肯定不是二分图,反之是偶环。
有向图判断是否存在环
即判断是否是dag,可以用topoSort,复杂度O(E),也可以用dfs,如果存在后向边,那么就存在环,如果当前点有指向在栈中结点的边,那么就是后向边。
有向图找出所有的环并输出,能找到最大环,也能判断奇偶环
因为只有三个点,所以可以暴力, 枚举两条边,判断第三条是不是存在即可。 fa -> u, u -> i, 判断g[i][fa]==1?
#include <iostream> #include <stdio.h> #include <string.h> #include <string.h> #include <math.h> #include <vector> #include <string> #include <vector> #include <set> #include <map> #include <queue> #include <stack> #include <algorithm> #include <functional> using namespace std; const int N = 5000 + 10; vector<int> g ; int st ,instack ,mark ,top; void dfs(int u) { instack[u] = true; mark[u] = true;//因为可能不联通,所以需要没有mark过的点,需要再次调用dfs st[++top] = u; for(int i=0;i<g[u].size(); ++i) { int v = g[u][i]; if(!instack[v]) dfs(v); else { int t; for(t=top;st[t]!=v;--t);//在栈中找到环的起始点 printf("%d:",top-t+1);//这这里就能判断是奇数环还是偶数环 for(int j=t;j<=top;++j) printf("%d ",st[j]); puts(""); } } instack[u] = false; top--; } void init(int n) { for(int i=1;i<=n;++i) { g[i].clear(); instack[i] = mark[i] = 0; } top = 0; } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { init(n); int u,v; for(int i=1;i<=m;++i) { scanf("%d%d",&u,&v); g[u].push_back(v); } for(int i=1;i<=n;++i) if(!mark[i]) dfs(i); } return 0; }
View Code
各种找环
START————————————————————————
无向图判断是否存在环
topoSort变种,将度<=1的点入队列,如果最后没有将所有的点入过队列,那么久存在环
无向图找长度为奇数或者长度为偶数的环。
首先,我们找到所有的点双联通分量,那么每个分量里面的点都在环上。那么而判断环是奇环还是偶环可以用二分图染色来判断,如果是奇环,那么肯定不是二分图,反之是偶环。
有向图判断是否存在环
即判断是否是dag,可以用topoSort,复杂度O(E),也可以用dfs,如果存在后向边,那么就存在环,如果当前点有指向在栈中结点的边,那么就是后向边。
有向图找出所有的环并输出,能找到最大环,也能判断奇偶环
相关文章推荐
- 一些集合算法
- JQ简单评分
- nginx优化 突破十万并发
- 例子:韩顺平JavaScript----JS乌龟抓小鸡游戏
- oracle中 connect by prior 递归算法
- Android开发时,提示no resource for "theme......."in package "android"
- Unable to execute dex: Multiple dex files define Landroid/support/v4/accessi问题解决
- poj 2723 Get Luffy Out(2-sat)
- zabbix_agentd.conf详解
- css3--颜色和透明度
- Android ListView工作原理完全解析,带你从源码的角度彻底理解,androidlistview
- Android Studio 1.2.2 修改JDK和SDK路径
- jq ul li案例
- Java中ArrayList和LinkedList区别
- asp.net动态设置标题title 关键字keywords 描述descrtptions
- BZOJ 1012 最大数maxnumber
- 联合主键和复合主键区别
- Google推荐的图片加载库Glide介绍
- 如何使用plsql导出oracle数据建表语句,存储过程,视图。以及表中数据
- Spice Windows Client 利用 USBDk 实现USB重定向