Как использовать dijkstras, чтобы получить количество кратчайших путей к каждому узлу из одного источника? - PullRequest
0 голосов
/ 05 апреля 2020

Мой код является модифицированной версией алгоритма Дейкстры, который отслеживает количество различных кратчайших путей к каждому узлу из источника. Однако это не совсем правильно. Кто-нибудь знает, что такое правильный алгоритм?

Здесь pq - это приоритетная сортировка пар (pii) очередей расстояний и узлов, dis - это стандартный массив расстояний для кратчайшего пути, а пути [i] представляют количество кратчайших путей от начала до i.

fill(dis, dis+n+1, INT_MAX); dis[start] = 0; pq.push({dis[start], start}); ways[start] = 1;
while(!pq.empty())
{
    pii cur = pq.top(); pq.pop(); if(cur.d > dis[cur.v]) continue;
    for(pii next : adj[cur.v])
    {
        if(cur.d + next.d < dis[next.v])
        {
            dis[next.v] = cur.d + next.d; pq.push({dis[next.v], next.v});
            ways[next.v] = ways[cur.v];
        }
        else if(cur.d + next.d == dis[next.v])
        {
            ways[next.v] += ways[cur.v]; 
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...