二分图的判定

              给定一个具有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(){//输入
} 

【算法】二分图的判定相关推荐

  1. 二分图的判定最大匹配

    如果一张无向图的N个结点可以分成A,B两个非空集合,其中 A ∩ B = ∅ A\cap B=\emptyset A∩B=∅,并且在同一集合内的点之间都没有边相连,则称这张图为二分图. 二分图判定 定 ...

  2. 第三次软工作业——实现最大字段和算法并进行判定条件覆盖

    第三次软工作业 实现最大子段和的算法并进行条件组合覆盖测试 (一)什么是最大子段和? 我自己的理解: 一个数组可以若干个子数组,包含自身.每一个字数组都有一个数组元素之和,求这些和之间的最大值. 最朴 ...

  3. 二分图的判定(模板)

    采用DFS和黑白二着色的方法判定二分图 vector<int> g[maxn];//邻接表 int color[maxn];//1,2分别代表黑色和白色,0表示还没着色,调用前要把colo ...

  4. 【模板】匈牙利算法 二分图最大匹配题模板

    [任务] 给定一个二分图,用匈牙利算法求这个二分图的最大匹配数. [说明] 求最大匹配,那么我们希望每一个在左边的点都尽量找到右边的一个点和它匹配. 我们一次枚举左边的点x的所有出边指向的点y, 若y ...

  5. NOI图论算法:二分图匹配

    二分图匹配 算法竞赛入门经典训练指南+陈锋+ch5.5_二分图的匹配 https://www.bilibili.com/video/BV1j5411x7PU SWPU-ACM每周算法讲堂-匈牙利算法 ...

  6. 深入理解JVM03--判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用

    本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Java世界中所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还"存活"着,哪些对 ...

  7. 深入理解JVM(三)——JVM之判断对象是否存活(引用计数算法、可达性分析算法,最终判定),Eclipse设置GC日志输出,引用

    本文转载自https://blog.csdn.net/ochangwen/article/details/51406779 本文是基于周志明的<深入理解Java虚拟机> 堆中几乎存放着Ja ...

  8. 算法014:判定字符串中字符是否唯一:实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

    题目:判定字符是否唯一:实现一个算法,确定一个字符串 s 的所有字符是否全都不同.示例 1:输入: s = "leetcode"输出: false示例 2:输入: s = &quo ...

  9. 浅谈匈牙利算法(二分图最大匹配)

    前置知识 一张图是二分图,当且仅当它的点可以被分成两部分,而这张图上的所有边的两个端点,都分属不同的部分.我们称这两个点集,一个叫左部,一个叫右部.左部中的点叫左部点:右部中的点叫右部点. 一张图的一 ...

最新文章

  1. 七牛上传文件小工具v0.1
  2. 180904 再卖菜 ccf
  3. 好端端的程序员,咋就成了新生代农民工!
  4. 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...
  5. linux 命令/目录 名称 英文单词 缩写 助记
  6. webbrowser实现input tab事件_如何合理构造一个Uploader工具类(设计到实现)
  7. Unity5.3官方VR教程重磅登场-系列7 优化VR体验
  8. 如何在 OS X Yosemite 中安装 Java
  9. Sharding-Proxy安装_以及_sharding-proxy自动分表配置_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记019
  10. 计算机与控制工程学院烟台大学,烟台大学计算机与控制工程学院欢迎大家
  11. A simple brute force problem.
  12. 【程序源代码】番茄时间小程序
  13. stuiod3t-2019030.dmg下载及studio3t macOS Cracking教程
  14. [论文总结] 科技论文英语写作笔记1
  15. 阿里巴巴校招笔试题整理
  16. 1984年图灵奖--尼克劳斯·沃思简介
  17. windows设置有线访问内网,无线访问外网
  18. 函数式编程之every函数
  19. 编写病人看病模拟程序
  20. [读书笔记] 区块链:从数字货币到信用社会

热门文章

  1. OpenCV C++ 10 - Invert Images
  2. python——数据类型
  3. Linux┊详解udev
  4. [android网络有效性检测] NetworkMonitor代码造成内存泄漏
  5. batch insert 1 million datas into mysql
  6. CSS cursor 属性
  7. 一块网卡设置多个IP地址
  8. Microsoft Accelerator for Windows Azure给我们的启示,由 TechStars 撰写
  9. 局域网聊天室 -ChatServer
  10. 【python数据挖掘课程】十四.Scipy调用curve_fit实现曲线拟合