二分图判定
二分图的判定
二分图的定义:若无向图
通俗的说,就是两个集合各自内部没有边连接
定理:一张无向图是二分图,当且仅当图中不存在奇环.
证明:反证法:设图中存在奇环,则无论怎么划分,必然存在一条边使得两边节点属同一集合,与定义矛盾,假设不成立,原命题成立
而在无向图中寻找奇环,可以采用黑白染色的方法。具体地,对于每一个连通块,任选一个点作为源点,染成白色,然后继续扩展,对于白色的下一层节点染成黑色,对于黑色的下一层节点染成白色即可。若染色过程中发现当前点与已经染过色的后继结点颜色相同,证明存在奇环,此图不是二分图
代码如下:
void dfs(int u,int num){
c[u]=num;
for(int i=head[u];i;i=nxt[i]){
int v=ver[i];
if(!c[v])dfs(v,num==1?2:1);
if(c[v]==c[u]){
puts("0");
exit(0);
}
}
}
//main中
for(int i=1;i<=n;i++)if(!c[i])dfs(i,1);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!