博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分图的判断——染色法
阅读量:4881 次
发布时间:2019-06-11

本文共 2060 字,大约阅读时间需要 6 分钟。

染色法判断二分图

二分图:

一个无向图,使得顶点集V可以分割为两个互不相交的子集A,B,使得所有边两端分别属于两个子集A,B。

要判断二分图,要分两种情况,一种是联通图,一种是非连通图,两者都不难。

大致思路就是先找到一个没被染色的节点u,把它染上一种颜色,之后遍历所有与它相连的节点v,如果节点v已被染色并且颜色和节点u一样,那么就失败了。如果这个节点v没有被染色,先把它染成与节点u不同颜色的颜色,然后遍历所有与节点v相连的节点............就这样循环下去,直到结束为止。

连通图代码:

1 #include
2 #include
3 #define N 42000 4 int next[N],to[N],num,head[N],col[N],flag,n,m,a,b; 5 void add(int false_from,int false_to){ 6 next[++num]=head[false_from]; 7 to[num]=false_to; 8 head[false_from]=num; 9 }10 void dfs(int x,int color){11 col[x]=color;12 for(int i=head[x];i;i=next[i]){13 if(col[to[i]]==col[x]){14 printf("NO");15 flag=1;16 exit(0);17 }18 if(!col[to[i]])19 dfs(to[i],-color);20 }21 }22 int main(){23 scanf("%d%d",&n,&m);24 for(int i=1;i<=m;++i){25 scanf("%d%d",&a,&b);26 add(a,b);27 add(b,a);28 }29 dfs(1,1);30 if(!flag)31 printf("YES");32 return 0;33 }
View Code

非连通图代码:

1 #include
2 #include
3 #define N 42000 4 int next[N],to[N],num,head[N],col[N],flag,n,m,a,b; 5 void add(int false_from,int false_to){ 6 next[++num]=head[false_from]; 7 to[num]=false_to; 8 head[false_from]=num; 9 }10 void dfs(int x,int color){11 col[x]=color;12 for(int i=head[x];i;i=next[i]){13 if(col[to[i]]==col[x]){14 printf("NO");15 flag=1;16 exit(0);17 }18 if(!col[to[i]])19 dfs(to[i],-color);20 }21 }22 int main(){23 scanf("%d%d",&n,&m);24 for(int i=1;i<=m;++i){25 scanf("%d%d",&a,&b);26 add(a,b);27 add(b,a);28 }29 for(int i=1;i<=n&&!flag;++i)30 if(!col[i])31 dfs(i,1);32 if(!flag)33 printf("YES");34 return 0;35 }
View Code

后记:本来都搞过这东西了,然而培训时听某清北奆佬讲到这,以为要搞更diao的东西,于是一激动就把原来那篇给删了,尽管补一篇不难,但是.........................................................

 

转载于:https://www.cnblogs.com/jsawz/p/6847185.html

你可能感兴趣的文章
5、泛型
查看>>
第二次冲刺作业
查看>>
【转】HTML, CSS和Javascript调试入门
查看>>
折线图-小案例
查看>>
STL:优先队列Priority Aueue
查看>>
蓝桥历年试题 套娃
查看>>
EF4.0和EF5.0增删改查的写法区别及执行Sql的方法
查看>>
判断是否为移动设备
查看>>
SQL注入原理
查看>>
作业一
查看>>
Matlab控制系统的建模及模型间的转换
查看>>
面向对象编程思想
查看>>
showModalDialog打开一个子窗口,在子窗口添加一条记录后,关闭子窗口刷新父窗口...
查看>>
微信支付体验
查看>>
Excel导数据到数据库
查看>>
zz 悲催的程序员,以及程序员的悲催
查看>>
Flv.js
查看>>
Java工程师成神之路
查看>>
线程池ThreadPoolExecutor整理
查看>>
如何将离线的PIP安装包快速安装好
查看>>