求助,我的二分图染色代码有问题
查看原帖
求助,我的二分图染色代码有问题
944873
dxy19213987956楼主2024/1/19 00:49
void dfs(int u,int num){
    for(int k=0;k<G[u].size();k++){
        int i=G[u][k];
        if(u==i)continue;
        if(color[i]==-1){
            color[i]=color[u]^1;
            dfs(i,num);
            p[num][color[i]].push_back(i);
        } else {
            if(color[i]==color[u]){
                flag=1;
                return;
            }
        }
    }
}
for(int i=1;i<=n;i++){
    if(color[i]==-1){
        color[i]=0;
        p[++cnt][0].push_back(i);
        dfs(i,cnt);
    }
    if(flag){
        cout << "No solution\n";
        return;
    }
}

这份代码是没问题的,但是当我加一个bool 数组v表示i点是否访问过时,代码无法通过,不知道为什么

void dfs(int u,int num){
    for(int k=0;k<G[u].size();k++){
        int i=G[u][k];
        if(u==i)continue;
        if(!v[i]){
            color[i]=color[u]^1;
            v[i]=1;
            dfs(i,num);
            p[num][color[i]].push_back(i);
        } else {
            if(color[i]==color[u]){
                flag=1;
                return;
            }
        }
    }
}


for(int i=1;i<=n;i++){
    if(!v[i]){
        color[i]=0;
        p[++cnt][0].push_back(i);
        v[i]=1;
        dfs(i,cnt);
    }
    if(flag){
        cout << "No solution\n";
        return;
    }
}
2024/1/19 00:49
加载中...