码迷,mamicode.com
首页 > 其他好文 > 详细

二分图判定

时间:2015-02-23 13:07:39      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

二分图判定问题:

判定是否存在一个合理的染色方案,使得我们所建立的无向图满足每一条边两端的顶点颜色都不相同

算法描述:

(1)选取一个未染色的节点u进行染色。

(2)遍历u的邻接点v:若v未染色,则将v染上与u不同的颜色并对v重复步骤(2);若v已经染色且颜色与u相同,则判定不可行并退出遍历。

(3)若所有节点都被染色,则判定可行。

代码实现:

 1 #include <iostream>
 2 #include <vector>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 #define MAXN 10005
 8 
 9 vector<int> g[MAXN];
10 int color[MAXN], n, m;
11 
12 bool isBiGraph(int x, int co)
13 {
14     bool ret = true;
15     color[x] = co;
16     int sz = g[x].size();
17     for(int i=0; i<sz; ++i)
18     {
19         int y = g[x][i];
20         if(color[y]<0)
21         {
22             ret = ret&&isBiGraph(y, co^1);
23             if(!ret) return ret;
24         }
25         else if(color[y]==co) return false;
26     }
27     return ret;
28 }
29 
30 void init()
31 {
32     for(int i=1; i<=n; ++i) g[i].clear();
33     memset(color+1, -1, n*sizeof(int));
34 }
35 
36 int main()
37 {
38     int t;
39     cin>>t;
40     while(t--)
41     {
42         cin>>n>>m;
43         init();
44         while(m--)
45         {
46             int u, v;
47             cin>>u>>v;
48             g[u].push_back(v);
49             g[v].push_back(u);
50         }
51         cout<<(isBiGraph(1, 0)?"Correct":"Wrong")<<endl;
52     }
53     return 0;
54 }

 

二分图判定

标签:

原文地址:http://www.cnblogs.com/pczhou/p/4297970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!