染色法


bool bicolorable(){//染色法   方镪
    queue<int>Q;
    color[0]=1;
    Q.push(0);
    while(!Q.empty()){
        int v1 = Q.front();
        Q.pop();
        for(int i=0;iint v2 =G[v1][i];
            if(color[v2]==0){ //情况1
                color[v2]=-color[v1];
                Q.push(v2);
            }
            else if(color[v2]==color[v1]){ //情况2
                return false;
            }
        }
    }
    return true;
}

 int bipartite(int s) {    王琦
        int u, v;  
        queue<int>Q;  
        color[s] = 1;  
        Q.push(s);  
        while (!Q.empty()) {  
            u = Q.front();  
            Q.pop();  
            for (int i = 0; i < G[u].size(); i++) {  
                v = G[u][i];  
                if (color[v] == 0) {  
                    color[v] = -color[u];  
                    Q.push(v);  
                }  
                else if (color[v] == color[u])  
                    return 0;  
            }  
        }  
        return 1;  
    }  

你可能感兴趣的:(图论专项)