图论 - 二分图的判断(dfs染色法)
二分图的判断(dfs染色法)
如何判断一个图是否为二分图
普通染色法模板
C++ 代码模板如下
思想:先将当前点染色,然后再将该点相连的结点进行染另外一种颜色
下面附上自己画的一张图假设我们从第一个点开始染成红色
后面的染色过程结合下面的代码就很好理解啦
宝图奉上: 请结合代码分析效果会更好
正确情乱:

无法构成二分图的例子如下:

染色过程核心代码
bool dfs(int node, int col)
{
color[node] = col; //染色
for (int i = 0; i < G[node].size(); i++)
{
//如果相邻的顶点同色,就剪掉这一枝,返回false
if (color[G[node][i]] == col)return false;
if (color[G[node][i]] == 0 && !dfs(G[node][i],-col))return false;
}
//如果都染了色返回true
return true;
}
整体代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int inf = 1000;
int V, E;
vector<int> G[inf];
int color[inf] = {0};
bool dfs(int node, int col)
{
color[node] = col; //染色
for (int i = 0; i < G[node].size(); i++)
{
//如果相邻的顶点同色,就剪掉这一枝,返回false
if (color[G[node][i]] == col)return false;
if (color[G[node][i]] == 0 && !dfs(G[node][i],-col))return false;
}
//如果都染了色返回true
return true;
}
void dfsTrave()
{
for (int i = 0; i < V; i++)
{
if (color[i] == 0)
{
if (!dfs(i, 1))
{
cout << "No" << endl;
return;
}
}
}
cout << "Yes" << endl;
}
int main()
{
cin >> V >> E;
int a, b;
for (int i = 0; i < E; i++)
{
cin >> a >> b;
G[a].push_back(b);
G[b].push_back(a);
}
dfsTrave();
system("pause");
return 0;
}
如果大家有什么疑问的话可以加qq向我提出哦,欢迎各位大佬指出问题。
如果你觉得对你有所帮助的话就给我点个赞,点燃我下次写文章的动力吧 _ !
图论 - 二分图的判断(dfs染色法)的更多相关文章
- dfs染色法判定二分图
#include<iostream> #include<cstring> using namespace std; ][],color[],n; int dfs(int x,i ...
- hdu 4751 Divide Groups(dfs染色 或 2-sat)
Problem Description This year is the 60th anniversary of NJUST, and to make the celebration more c ...
- 染色法判断是否是二分图 hdu2444
用染色法判断二分图是这样进行的,随便选择一个点, 1.把它染成黑色,然后将它相邻的点染成白色,然后入队列 2.出队列,与这个点相邻的点染成相反的颜色 根据二分图的特性,相同集合内的点颜色是相同的,即 ...
- hdu 2444(染色法判断二分图+最大匹配)
The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- Wrestling Match---hdu5971(2016CCPC大连 染色法判断是否是二分图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5971 题意:有n个人,编号为1-n, 已知X个人是good,Y个人是bad,m场比赛,每场比赛都有一个 ...
- HDU 2444 二分图判断 (BFS染色)+【匈牙利】
<题目链接> 题目大意: 有N个人,M组互相认识关系互相认识的两人分别为a,b,将所有人划分为两组,使同一组内任何两人互不认识,之后将两个组中互相认识的人安排在一个房间,如果出现单人的情况 ...
- Catch---hdu3478(染色法判断是否含有奇环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478 题意:有n个路口,m条街,一小偷某一时刻从路口 s 开始逃跑,下一时刻都跑沿着街跑到另一路口,问 ...
- 【01染色法判断二分匹配+匈牙利算法求最大匹配】HDU The Accomodation of Students
http://acm.hdu.edu.cn/showproblem.php?pid=2444 [DFS染色] #include<iostream> #include<cstdio&g ...
- Codeforces 1144F Graph Without Long Directed Paths DFS染色
题意: 输入一张有向图,无自回路和重边,判断能否将它变为有向图,使得图中任意一条路径长度都小于2. 如果可以,按照输入的边的顺序输出构造的每条边的方向,构造的边与输入的方向一致就输出1,否则输出0. ...
随机推荐
- svn在cleanup 时,提示privious operation has not finished,解决方案
在updated代码时,svn 提示 上一次操作失败,需要cleanup. 执行cleanup时,提示:cleanup失败,因为上一次操作失败,请先执行cleanup.很幽默的提示. svn的“.sv ...
- 【VS开发】【C/C++开发】vs2015编译boost 64位
vs2015编译boost 64位 ---恢复内容开始--- step 1: 打开Developer Command Prompt for VS2015命令行窗口 step 2: 执行bootstra ...
- Kafka支持单集群20万分区
Kafka支持单集群20万分区 之前网上关于确定Kafka分区数的博客多多少少都源自于饶军大神的文章,如今他带来了这方面的第二篇文章,特此翻译一下,记录一下其中的要点. 原贴地址: https://w ...
- Spring的NamedParameterJdbcTemplate的简单使用
原文地址:https://www.iteye.com/blog/itommy-2354746 Spring JDBC包提供了JdbcTemplate和它的两个兄弟SimpleJdbcTemplate和 ...
- [原创]K8Cscan4.0之Base64/HEX密码批量加密解密插件以及源码
前言 今天抽空更新了Cscan,新增对C#编译的EXE动态调用,新增对PowerShell脚本动态调用(无论是否安装PowerShell) 增加一个字符串列表str.txt,用于存放任意字符串,比如帐 ...
- OpenMark
what's open mark??? http://www.open.ac.uk/openmarkexamples/
- Redis的LRU算法
Redis的LRU算法 LRU算法背后的的思想在计算机科学中无处不在,它与程序的"局部性原理"很相似.在生产环境中,虽然有Redis内存使用告警,但是了解一下Redis的缓存使用策 ...
- drf面试题及总结
drf面试题及总结 1.什么是前后端分离 2.什么是restful规范 3.模拟浏览器进行发送请求的工具 4.查找模板的顺序 5.什么是drf组件 6.drf组件提供的功能 7.drf继承过哪些视图类 ...
- day58——模板继承、组件、自定义标签和过滤器、inclusion_tag、静态文件配置、url别名和反向解析、url命名空间
day58 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承它使用) 2. 在母版中定义block块(可以定义多个,整个页面任意位置) {% block co ...
- 关于 golang build
如何编译 golang 的编译还是比较容易的,用法如下: go build [-o output] [-i] [build flags] [packages] 上面方括号标记的参数,都可以没有-- 最 ...