判断一个图是否是二分图
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int N = 50005;
int col[N];
vector<int>V[N];
bool BFS(int start)
{
col[start] = 1;
queue<int>q;
q.push(start);
while (!q.empty())
{
int k = q.front();
q.pop();
for (int i = 0; i < V[k].size(); i++) {
int point = V[k][i];
int cc = col[k] == 1 ? 2 : 1;
if (col[point] == 0) {
col[point] = cc;
q.push(point);
}
else if (col[point] != cc)return false;
}
}
return true;
}
int main()
{
int v, e;//图中点的个数和边的条数
cin >> v >> e;
for (int i = 0; i < e; i++) {
int u, v;
cin >> u >> v;
V[u].push_back(v);
V[v].push_back(u);
}
memset(col, 0, sizeof(col));
if (BFS(0))cout << "YES" << endl;
else cout << "NO" << endl;
return 0;
}
判断一个图是不是二分图
最新推荐文章于 2022-07-26 19:06:57 发布