描述:给定一个具有n个顶点,要给图上的每个顶点染色,并且要求相邻的顶点的颜色不同,问 能否最多用2种颜色进行染色
//BFS 二分图
#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
#define MAX_N 2005
using namespace std;
vector<int>G[MAX_N];
int vis[MAX_N];
void bfs()
{
memset(vis,0,sizeof(vis));
int x = 1;//从顶点1 开始广搜
queue<int> q;
q.push(x);
vis[x] = 1;
while(!q.empty())
{
x = q.front();
q.pop();
for(int i = 0; i < G[x].size(); i++)
{
int y = G[x][i];
if(vis[y] == 0)
{
vis[y] = (vis[x] == 1 ? -1 : 1);
q.push(y);
}
else
{
if(vis[y] == vis[x])
{
printf("No\n");
return ;
}
}
}
}
printf("Yes\n");
return ;
}
int main()
{
int V,E;//V个点,E条边
while(~scanf("%d %d", &V, &E))
{
for(int i = 1 ;i <= E ; i++)
{
int a,b;
scanf("%d %d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
bfs();
for(int i = 1; i <= V; i++)
G[i].clear();
}
return 0;
}
关于从那一个顶点开始bfs,只要顶点都存在,那么都可以当作开始的顶点进行bfs,无所谓
并没有上交OJ判定,自己写了组数据测试:input
5 5
1 2
1 5
2 3
2 4
3 5
output
Yes