Cod sursa(job #1415615)

Utilizator alex1096Postolache Alex alex1096 Data 5 aprilie 2015 15:55:04
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <set>
#include <vector>
#include <fstream>
using namespace std;
const int nmax=50000,inf=1<<30;
vector<pair<int,int> > v[nmax];
set<pair<int,int> > S;
int N,M,d[nmax];

void citire()
{
    int x,y,c;
    ifstream fin("dijkstra.in");
    fin>>N>>M;
    while(M--)
    {
        fin>>x>>y>>c;
        v[x].push_back(pair<int,int> (c,y));
    }
}
void dijk()
{
    int cost,varf;
    for(int i=2;i<=N;++i)
        d[i]=inf;
    S.insert(pair<int,int> (0,1));
    while(!S.empty())
    {
        cost=S.begin()->first;
        varf=S.begin()->second;
        S.erase(S.begin());
        for(vector<pair<int,int> >::iterator it=v[varf].begin();it!=v[varf].end();++it)
            if(d[it->second]>d[varf]+it->first)
        {
            S.erase(pair<int,int> (d[it->second],it->second));
            d[it->second]=d[varf]+it->first;
            S.insert(pair<int,int> (d[it->second],it->second));
        }
    }
}
void afisare()
{
    ofstream fout("dijkstra.out");
    for(int i=2;i<=N;++i)
        if(d[i]!=inf)
            fout<<d[i]<<" ";
        else
            fout<<0<<" ";
}
int main()
{
    citire();
    dijk();
    afisare();
    return 0;
}