Cod sursa(job #1835028)

Utilizator rockerboyHutter Vince rockerboy Data 26 decembrie 2016 03:16:29
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <utility>
#include <limits>
#include <queue>

std::ifstream be ("dijkstra.in");
std::ofstream ki ("dijkstra.out");

struct csp
{
    int index, suly;
};

typedef std::vector<std::list<csp> > graf_t;
typedef std::pair<int, int> par;
typedef std::list<csp>::iterator iterator_t;

const int INF = std::numeric_limits<int>::max();

graf_t g;

void dijkstra (graf_t& graf, int start, std::vector<int>& hossz)
{
    hossz.resize (graf.size(), INF);
    std::priority_queue<par, std::vector<par>, std::greater<par>> q;
    hossz[start] = 0;
    q.push (par(0,1));


    while (!q.empty())
    {
        int u = q.top().second;
        q.pop();
        for (iterator_t i=graf[u].begin(); i != graf[u].end(); i++)
        {
            int v = i->index;
            int suly = i->suly;
            if (hossz[u]+suly < hossz[v])
            {
                hossz[v] = hossz[u]+suly;
                q.push(par(hossz[v], v));
            }
        }
    }
}

int main()
{
    int n, m, i, csp1, csp2, suly;

    be >> n >> m;
    g.resize (n+1);
    for (i=0; i<m; i++)
    {
        be >> csp1 >> csp2 >> suly;
        g[csp1].push_back ({csp2, suly});
    }

    std::vector<int> hossz;
    dijkstra (g, 1, hossz);

    for (int i=2; i<hossz.size(); i++)
    {
        if (hossz[i] == INF) ki << "0 ";
        else ki << hossz[i] << " ";
    }
}