Uva 10004(二分图的判定)
这题其实很简单的说,第一次用邻接表来存图= =
首先图的储存结构是结构体+head数组。。。其实head数组保存的
struct node {int v;int next; }V[200*200];
假设现在有u节点,v表示的是和他邻接的点,next保存的是v对应的编号,head数组保存的是链表的头节点编号。
比如有
1 2
1 3
1 4的点边关系那么V[head[1]].v=4;V[head[2]].v=1,V[head[3]].v=1;
现在讲讲如何判断图是不是二分图,首先对任意没染色的点进行染色,之后判断与其相邻的点若是没染色则染上与其相邻的顶点不同的颜色,若是染过色且与相邻的顶点颜色相同则不是二分图==
判断的过程用dfs来实现
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; struct node {int v;int next; }V[200*200]; int tol; int head[200]; int col[200]; void init() {int tol=0;memset(head,-1,sizeof(head)); } void add(int u,int v) {V[tol].v=v;V[tol].next=head[u];head[u]=tol++; } bool bldfs(int u,int co) {int i,v;col[u]=co;for(i=head[u];i!=-1;i=V[i].next){v=V[i].v;if(col[v]==co)return false;if(col[v]==-1&&!bldfs(v,co^1))return false;}return true; } int main() {int n,m;while(scanf("%d",&n)!=EOF&&n){init();int u,v;scanf("%d",&m);for(int i=0;i<m;i++){scanf("%d %d",&u,&v);add(u,v);add(v,u);}memset(col,-1,sizeof(col));int flag=0;for(int i=0;i<n;i++){if(col[i]==-1)if(!bldfs(i,0)){flag=1;break;}}if(flag==1)printf("NOT BICOLORABLE.\n");elseprintf("BICOLORABLE.\n");}return 0; }
转载于:https://www.cnblogs.com/NaCl/p/4796279.html
Uva 10004(二分图的判定)相关推荐
- 【算法】二分图的判定
二分图的判定 给定一个具有n个顶点的图.要给图上每个顶点染色,并且要使相邻的顶点颜色不同. 判断是否能最多用两种颜色进行染色.题目保证没有重边和自环. 概念:把相邻顶点染成不同颜色的问题叫做图的着色问 ...
- 二分图的判定最大匹配
如果一张无向图的N个结点可以分成A,B两个非空集合,其中 A ∩ B = ∅ A\cap B=\emptyset A∩B=∅,并且在同一集合内的点之间都没有边相连,则称这张图为二分图. 二分图判定 定 ...
- UVA 10004 Bicoloring (二分染色)
题目链接:https://vjudge.net/problem/UVA-10004 题意:给你一个连通图,问能否将每个节点染成两种颜色之一,使得每条边两边的节点颜色不同. (本质就是二分图的判定,有个 ...
- 二分图的判定(模板)
采用DFS和黑白二着色的方法判定二分图 vector<int> g[maxn];//邻接表 int color[maxn];//1,2分别代表黑色和白色,0表示还没着色,调用前要把colo ...
- UVA 10004 - Bicoloring
模拟染色,因为只有两种颜色,所以分别用 0. 1 代表这两种颜色,然后从0开始深搜,如果 每个点都能染上色,且相邻两点的颜色不同,则符合要求. #include<stdio.h>#incl ...
- UVA 10004 Bicoloring
UVA_10004 对于这个题目,我们可以直接模拟染色的过程即可,如果发现要涂某一块时这个块已经被涂了色,并且与我们要使用的颜色不同的话,就说明这个图不能被染成BICOLORABLE的. #inclu ...
- 东哥带你刷图论第四期:二分图的判定
学算法认准 labuladong 点击卡片可搜索关键词
- POJ - 2942 Knights of the Round Table(点双缩点+二分图判定)
题目链接:点击查看 题目大意:国王要在圆桌上召开骑士会议,但是有若干对骑士之间互相憎恨.出于各种各样奇怪的原因,每次开会都必须有以下要求: 相互憎恨的两个骑士不能坐在相邻的两个位置 为了让投票表决议题 ...
- CH - 4901 关押罪犯(二分图判定+二分/并查集)
题目链接:点击查看 题目大意:一共有n个罪犯,有m对仇人,每对仇人都有一个仇恨值,如果两个仇人在一起的话,会对监狱造成等价于仇恨值的损失,现在有两个监狱,可以将罪犯们分开关押,问监狱的最小损失是多少 ...
最新文章
- 201521123060 《Java程序设计》第10周学习总结
- Web学习第一天:Servlet+JSP简单Demo
- 0经验跨行,我怎么拿到谷歌offer的?
- freemarker模板最小案例实现
- 计算机视觉与深度学习 | 复杂环境下的视觉同时定位与地图构建(SLAM)
- Linux安装无法运行install,linux 无法 安装swoole
- 【Linux】一步一步学Linux——whereis命令(15)
- java nio2 iocp_基于JDK7 NIO2的高性能web服务器实践之二(转)
- mysql 运维 最佳实践_Mysql 开发最佳实践
- 前端设置,验证码登录
- 谈谈NiTE 2手部跟踪在彩色图像上的显示
- 【JavaScript】apply和call的区别在哪?
- leetcode面试题 04.03. 特定深度节点链表(bfs)
- shell 删除文本中的重复行(sort+uniq/awk/sed) (方法=效率啊)
- 轻易致盲分类器!普渡大学提出光学对抗攻击算法:OPAD,想法奇特,性能有效!...
- 抽丝剥茧,在实践中深入学习QTP
- c语言迷宫算法坐标怎么定义,[原创]递归随机迷宫生成算法详解
- mysql数据库置疑,sqlserver2000数据库置疑的解决方法
- 如何配置ASP运行环境
- Vscode latex插件生成pdf目录空白问题
热门文章
- randomized algorithms 有哪些_毛毯分类有哪些 毛毯的种类
- mysql 小雨_Mysql数据库
- oracle移动硬盘盒,oracle-linux下挂载移动硬盘 NTFS类型
- STM32-Systick滴答定时器-延时函数
- 放射性渐变色html,html5 canvas绘制放射性渐变色效果
- capture 部分元器件编号_十大电子元器件及其相关基础知识
- dz论坛连接mysql数据库_dz论坛搬家后连接数据库等教程
- 正在从“vetur”获取代码操作_长时间运行 io.Reader 和 io.Writer 操作测算进度和估算剩余时间...
- php htmlspecialchars 不管用,php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总_php技巧...
- java中函数过载,Java继承中成员方法的overload(重载/过载)