微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的代码中查找图形是否为二部图有什么问题?

如何解决我的代码中查找图形是否为二部图有什么问题?

我正在做一个简单的 BFS 并标记当前遍历顶点下顶点的相邻元素,如果它再次在当前遍历顶点的下一个顶点中找到,则它不是二部。
>

#include <bits/stdc++.h>

using namespace std;

vector<long> g[100000];

void neighbour(long it,vector<bool>& nei)
{
    for (auto itr : g[it])
        nei[itr] = true;
}

bool BFSbipartile(vector<bool>& vis,long v,long ver)
{
    queue<long> q;

    bool flag = true;
    q.push(v);
    vis[v] = true;
    while (!q.empty()) {
        long t = q.front();
        q.pop();
        vector<bool> nei(ver + 1,false);
        for (auto it : g[t]) {
            if (!vis[it]) {
                neighbour(it,nei);
                if (nei[it] == true) {
                    flag = false;
                    break;
                }
                vis[it] = true;
                q.push(it);
            }
            if (!flag)
                return false;
        }
    }
    return true;
}

int main()
{
    long v,e,e1,e2;
    cin >> v >> e;
    for (long i = 0; i < e; i++) {
        cin >> e1 >> e2;
        g[e1].push_back(e2);
        g[e2].push_back(e1);
    }
    vector<bool> vis(v + 1,false);
    bool tru = true;
    for (int i = 1; i <= v; i++) {
        if (!vis[i])
            tru = BFSbipartile(vis,i,v);
        if (!tru) {
            cout << 0 << endl;
            break;
        }
    }
    if (tru)
        cout << 1 << endl;

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。