zoukankan      html  css  js  c++  java
  • 二分图判定

    二分图判定问题:

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

    算法描述:

    (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         bool ans = true;
    52         for(int i=1; i<=n; ++i)
    53             if(color[i]<0)  ans  = (ans&&isBiGraph(i, 0));
    54         cout<<(ans?"Correct":"Wrong")<<endl;
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    the Agiles Scrum Meeting 8
    the Agiles Scrum Meeting 7
    the Agiles Scrum Meeting 6
    项目使用说明——英文版
    第十次例会
    第九次例会
    第八次例会
    第六次例会
    第七次例会
    第五次例会
  • 原文地址:https://www.cnblogs.com/pczhou/p/4297970.html
Copyright © 2011-2022 走看看