【算法】二分图的判定
二分图的判定
给定一个具有n个顶点的图。要给图上每个顶点染色,并且要使相邻的顶点颜色不同。
判断是否能最多用两种颜色进行染色。题目保证没有重边和自环。
概念:把相邻顶点染成不同颜色的问题叫做图的着色问题。对图进行染色所需要的最小颜色数称为最小着色度。
最小着色度为2的图称作二分图。
分析:如果只用两种颜色,那么确定一个顶点的颜色之后,和它相邻的顶点的颜色也就确定了。
因此,选择任意一个顶点出发,依次确定相邻顶点的颜色,就可以判断是否可以被2种颜色染色了。
这个问题用深度优先搜索可以简单实现。
#include <bits\stdc++.h>
using namespace std;
#define MAX_V 1000//输入
vector<int> G[MAX_V]; //图
int V; //顶点数
int color[MAX_V]; //顶点的颜色 (1 or -1) //顶点v,颜色c
bool dfs(int v,int c){color[v] = c;//把当前顶点相邻的顶点扫一遍 for(int i = 0;i < G[v].size(); i++){//如果相邻顶点已经被染成同色了,说明不是二分图 if(color[G[v][i]] == c) return false;//如果相邻顶点没有被染色,染成-c,看相邻顶点是否满足要求 if(color[G[v][i]] == 0 && !dfs(G[v][i],-c)) return false;}//如果都没问题,说明当前顶点能访问到的顶点可以形成二分图 return true;
}void solve(){//可能是不连通图,所以每个顶点都要dfs一次 for(int i = 0;i < V; i++){if(color[i] == 0){//第一个点颜色为 1 if(!dfs(i,1)){cout << "No" << endl;return;}}}
}int main(){//输入
}
【算法】二分图的判定相关推荐
- 二分图的判定最大匹配
如果一张无向图的N个结点可以分成A,B两个非空集合,其中 A ∩ B = ∅ A\cap B=\emptyset A∩B=∅,并且在同一集合内的点之间都没有边相连,则称这张图为二分图. 二分图判定 定 ...
- 第三次软工作业——实现最大字段和算法并进行判定条件覆盖
第三次软工作业 实现最大子段和的算法并进行条件组合覆盖测试 (一)什么是最大子段和? 我自己的理解: 一个数组可以若干个子数组,包含自身.每一个字数组都有一个数组元素之和,求这些和之间的最大值. 最朴 ...
- 二分图的判定(模板)
采用DFS和黑白二着色的方法判定二分图 vector<int> g[maxn];//邻接表 int color[maxn];//1,2分别代表黑色和白色,0表示还没着色,调用前要把colo ...
- 【模板】匈牙利算法 二分图最大匹配题模板
[任务] 给定一个二分图,用匈牙利算法求这个二分图的最大匹配数. [说明] 求最大匹配,那么我们希望每一个在左边的点都尽量找到右边的一个点和它匹配. 我们一次枚举左边的点x的所有出边指向的点y, 若y ...
- NOI图论算法:二分图匹配
二分图匹配 算法竞赛入门经典训练指南+陈锋+ch5.5_二分图的匹配 https://www.bilibili.com/video/BV1j5411x7PU SWPU-ACM每周算法讲堂-匈牙利算法 ...
- 深入理解JVM03--判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用
本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还"存活"着,哪些对 ...
- 深入理解JVM(三)——JVM之判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用
本文转载自https://blog.csdn.net/ochangwen/article/details/51406779 本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Ja ...
- 算法014:判定字符串中字符是否唯一:实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
题目:判定字符是否唯一:实现一个算法,确定一个字符串 s 的所有字符是否全都不同.示例 1:输入: s = "leetcode"输出: false示例 2:输入: s = &quo ...
- 浅谈匈牙利算法(二分图最大匹配)
前置知识 一张图是二分图,当且仅当它的点可以被分成两部分,而这张图上的所有边的两个端点,都分属不同的部分.我们称这两个点集,一个叫左部,一个叫右部.左部中的点叫左部点:右部中的点叫右部点. 一张图的一 ...
最新文章
- 七牛上传文件小工具v0.1
- 180904 再卖菜 ccf
- 好端端的程序员,咋就成了新生代农民工!
- 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...
- linux 命令/目录 名称 英文单词 缩写 助记
- webbrowser实现input tab事件_如何合理构造一个Uploader工具类(设计到实现)
- Unity5.3官方VR教程重磅登场-系列7 优化VR体验
- 如何在 OS X Yosemite 中安装 Java
- Sharding-Proxy安装_以及_sharding-proxy自动分表配置_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记019
- 计算机与控制工程学院烟台大学,烟台大学计算机与控制工程学院欢迎大家
- A simple brute force problem.
- 【程序源代码】番茄时间小程序
- stuiod3t-2019030.dmg下载及studio3t macOS Cracking教程
- [论文总结] 科技论文英语写作笔记1
- 阿里巴巴校招笔试题整理
- 1984年图灵奖--尼克劳斯·沃思简介
- windows设置有线访问内网,无线访问外网
- 函数式编程之every函数
- 编写病人看病模拟程序
- [读书笔记] 区块链:从数字货币到信用社会
热门文章
- OpenCV C++ 10 - Invert Images
- python——数据类型
- Linux┊详解udev
- [android网络有效性检测] NetworkMonitor代码造成内存泄漏
- batch insert 1 million datas into mysql
- CSS cursor 属性
- 一块网卡设置多个IP地址
- Microsoft Accelerator for Windows Azure给我们的启示,由 TechStars 撰写
- 局域网聊天室 -ChatServer
- 【python数据挖掘课程】十四.Scipy调用curve_fit实现曲线拟合