二分图【图搜索】
来源:互联网 发布:大数据分析报告案例 编辑:程序博客网 时间:2024/05/01 04:28
该博文主要结合挑战程序设计竞赛98页的讲解
二分图判定,给一个图,有V个点和E个边,给每个顶点染色,相邻颜色不同,能否最多用两种颜色染色,没有重边喝自环
用两种颜色,也就是染了一个点之后,相邻的点颜色也就确认了。
从一个点出发,依次确定相邻顶点颜色,也就可以判断了。
所以书中用到了dfs深度优先搜索实现
伪代码如下:
bfs(v,c){
//对v染色c
//遍历相邻的点进行染色
{//同色 false
//继续bfs染色并判断。
}
//都染色了true
}
#include <cstdio>#include <cstring>#include <vector>#define MAX 102 using namespace std;vector<int> G[MAX];int color[102];int V,E;bool dfs(int v,int c){color[v]=c;for(int i=0;i<G[i].size();i++){if(color[G[v][i]]==c) return false;if(color[G[v][i]]==0)if(!dfs(G[v][i],-c)){return false;}}return true;}void solve(){for(int i=0;i<V;i++){if(color[i]==0){if(!dfs(i,1)){printf("No\n");return;}}}printf("Yes\n");}int main(){int s,t;scanf("%d%d",&V,&E);memset(color,0,sizeof(color));for(int i=0;i<E;i++){scanf("%d%d",&s,&t);G[s].push_back(t);G[t].push_back(s);}solve();for(int i=0;i<V;i++)printf("%d ",color[i]); return 0;}
注意无向图从s到t和t到s都要存进去
//边上有属性:struct edge{ int to,cost;};vector<edge> G[MAX_V];
邻接表在边少的时候占用少量内存,但是和邻接矩阵相比较为复杂
邻接链表中查询两点之间是否有变需要遍历一遍链表才能知道。
0 0
- 二分图【图搜索】
- poj 2112 最大流求二分图匹配/二分搜索
- 二分图判断 (图的搜索)
- [图的搜索]二分图判定
- ZOJ 1002 Fire Net (搜索 || 二分图)
- 排座位 二分图最大匹配 搜索
- 二分图判定的两种搜索实现
- hdu1045 暴力搜索,用二分图也可以做
- 关押罪犯-详解-noip2010-并查集--搜索--二分图
- Codeforces 688C NP-Hard Problem【二分图】【搜索】
- hihocoder 二分图判定 简单搜索和超快板子
- HDU 1045 Fire Net(搜索/贪心/二分图最大匹配)
- POJ 3057:Evacuation (搜索+二分图匹配)
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- 二分搜索
- redis的aof方式持久化
- 边框布局
- 依次使用的移动站工具
- 为什么德国人工作这么慢,但效率却很高?
- poj-1698-Alice's Chance
- 二分图【图搜索】
- Linux查看硬件所有信息
- 今日头条2017后端工程师实习生笔试题
- 最长公共子序列问题(LCS)
- Lua与C/C++交互函数问题
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
- Mybatis-jar-lib
- C++ 模板函数 知多少?
- 升级IE不成功