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.