Cod sursa(job #1856600)

Utilizator andrew_assassin789Andrei Manea andrew_assassin789 Data 25 ianuarie 2017 09:23:31
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#define w 50001
using namespace std;
struct nod{int c,v;};
class prio
{
    public:
    bool operator ()(nod &p1 ,nod&p2)
    {
        return p1.c>p2.c;
    }
};
priority_queue <nod, vector <nod>, prio> q;
vector <nod> a[w];
int d[w];
void dij()
{
    nod t,r,rr;int i;
    while (!q.empty())
    {
        t=q.top();
        q.pop();
        for (i=0;i<a[t.v].size();i++)
        {
            r=a[t.v][i];
            if (d[r.v]>d[t.v]+r.c)
            {
                d[r.v]=d[t.v]+r.c;
                rr.v=r.v;rr.c=d[r.v];
                q.push(rr);
            }
        }
    }
}
int main()
{
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");
    int n,i,m,x,y,cost;
    f>>n>>m;
    nod t;
    for (i=1;i<=m;i++)
    {
        f>>x>>y>>cost;
        t.v=y;t.c=cost;
        a[x].push_back(t);
    }
    for (i=2;i<=n;i++) d[i]=INT_MAX;
    t.c=0;t.v=1;
    q.push(t);
    dij();
    for (i=2;i<=n;i++)
    {
        if (d[i]==INT_MAX) g<<"0 ";
        else g<<d[i]<<" ";
    }
    g<<'\n';
    f.close();
    g.close();
    return 0;
}