Skip to content

k-bfs.cpp

cpp
while (1) {
    int x = -1;

    for (int i = 0; i < 2; i++) {
        while (!q[i].empty() && vis[q[i].front()])
            q[i].pop();

        if (!q[i].empty() && (x == -1 || dis[q[i].front()] < dis[x]))
            x = q[i].front();
    }

    if (x == -1)
        break;

    vis[x] = 1;

    for (int i = head[x]; i; i = e[i].nxt) {
        int y = e[i].to;

        if (dis[y] > dis[x] + e[i].val) {
            dis[y] = dis[x] + e[i].val;
            q[e[i].val - 1].push(y);
        }
    }
}
while (1) {
    int x = -1;

    for (int i = 0; i < 2; i++) {
        while (!q[i].empty() && vis[q[i].front()])
            q[i].pop();

        if (!q[i].empty() && (x == -1 || dis[q[i].front()] < dis[x]))
            x = q[i].front();
    }

    if (x == -1)
        break;

    vis[x] = 1;

    for (int i = head[x]; i; i = e[i].nxt) {
        int y = e[i].to;

        if (dis[y] > dis[x] + e[i].val) {
            dis[y] = dis[x] + e[i].val;
            q[e[i].val - 1].push(y);
        }
    }
}

Released under the MIT License.