Cod sursa(job #1501261)

Utilizator bpalaniciPalanici Bogdan bpalanici Data 13 octombrie 2015 10:02:37
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

const int inf = 0x3f3f3f3f;
int n, start, a, b, cost;
int dist[105];
vector < pair <int, int> > graf[105];

class cmp
{
public:
    bool operator () (int &x, int &y)
    {
        return dist[x] > dist[y];
    }
};

priority_queue <int, vector <int>, cmp> Heap;

void dijkstra(int start)
{
    int next_nod, next_cost;
    memset(dist, inf, sizeof dist);
    Heap.push(start);
    dist[start] = 0;
    while (!Heap.empty())
    {
        int nod = Heap.top();
        Heap.pop();
        for (const auto &it : graf[nod])
        {
            next_nod = it.first; next_cost = it.second;
            if (dist[next_nod] > dist[nod] + next_cost)
            {
                dist[next_nod] = dist[nod] + next_cost;
                Heap.push(next_nod);
            }
        }
    }
}

int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    fin >> n >> start;
    while (fin >> a >> b >> cost)
        graf[a].push_back(make_pair(b, cost));

    dijkstra(start);

    for (int i = 1; i <= n; i++)
       fout << (dist[i] == inf ? 0 : dist[i]) << " ";
    return 0;
}