二分图问题

判断二分图方法:用染色法,把图中的点染成黑色和白色。
首先取一个点染成白色,然后将其相邻的点染成黑色,如果发现有相邻且同色的点,那么就退出,可知这个图并非二分图。

二分图中不存在奇环, 所以可以用染色法判断奇环

int istwo(int u)
{
    queue<int> E;
    mem(vis, -1);
    E.push(u);
    vis[u] = 1;
    while(!E.empty())
    {
        u = E.front(); E.pop();
        for(int i=0; i<G[u].size(); i++)
        {
            int v = G[u][i];
            if(vis[v] == -1)
            {
                if(vis[u] == 1) vis[v] = 0;
                else vis[v] = 1;
                E.push(v);
            }
            else if(vis[v] == vis[u])
                return 0;
        }
    }
    return 1;
}

int main()
{
    istwo(1);
}

 

如果分为两队

使每队里的人都相互认识  则不认识的两个人建边然后染色

使每队里的人都不相互认识  则认识的两个人建边然后染色

 

posted @ 2018-07-14 14:48  WTSRUVF  阅读(156)  评论(0编辑  收藏  举报