C++实现判断图是否为二部图的算法
在图论中,判断一个图是否为二部图是一个经典的问题。这篇文章介绍一种基于BFS算法的C++实现方法。
什么是二部图?
一个无向图G=(V,E)是二部图,当且仅当所有的顶点可以分为两个集合V1和V2,且满足:
-
V1和V2内部的顶点没有边相连。
-
每个集合中的任意两个顶点都有边相连。
可以直观的理解为在一个平面上把所有点分为两类,使得每类中的点没有连线,而且不同类中的点之间都有连线。
算法思路
通过BFS遍历图中所有的节点,并将其染成两种不同的颜色,如果发现任意两个邻接节点颜色相同,则说明该图不是二部图,反之则是二部图。
C++代码实现
#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;
int n, m, head[maxn], color[maxn];
struct Edge {
int from, to, next;
} edges[maxn];
void addEdge(int from