二分图判定 bfs版

来源:互联网 发布:优化产业布局 编辑:程序博客网 时间:2024/06/05 20:58

描述:给定一个具有n个顶点,要给图上的每个顶点染色,并且要求相邻的顶点的颜色不同,问 能否最多用2种颜色进行染色

//BFS 二分图 #include <cstdio>#include <iostream>#include <cstring>#include <queue>#include <vector>#define MAX_N 2005using 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


1 0
原创粉丝点击