Cod sursa(job #2205977)

Utilizator Calin998Calin Gligore Calin998 Data 20 mai 2018 18:55:42
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#include <list>

using namespace std;

int main() {
    vector<list<pair<unsigned long long,unsigned long long>>>Graf;
    ifstream fin("dijkstra.in");
    unsigned long long N,M,i,n1,n2,c;
    fin>>N>>M;
    Graf.resize(N+1);
    for(i=0;i<M;i++)
    {
        fin>>n1>>n2>>c;
        Graf[n1].push_back(make_pair(n2,c));
        Graf[n2].push_back(make_pair(n1,c));
    }
    fin.close();
    unsigned long long s=1;
    vector<long long>viz,DIST,pred;
    viz.resize(N+1);
    pred.resize(N+1);
    DIST.resize(N+1);
    for(i=2;i<=N;i++)
        DIST[i]=8888888888;
    priority_queue<pair<unsigned long long,unsigned long long>,vector<pair<unsigned long long,unsigned long long>>,greater<pair<unsigned long long,unsigned long long>>> Q;//cost,nod
    Q.push(make_pair(0,s));
    DIST[s]=0;
    while(!Q.empty())
    {
        unsigned long long x=Q.top().second;
        Q.pop();
        if(viz[x]==1)
            continue;
        viz[x]=1;
        for(pair<unsigned long long,unsigned long long>y:Graf[x])
        {
            if((DIST[y.first]>DIST[x]+y.second))
            {
                pred[y.first]=x;
                DIST[y.first]=DIST[x]+y.second;
                Q.push(make_pair(DIST[y.first],y.first));
            }
        }
    }
    ofstream fout("dijkstra.out");
    for(i=2;i<=N;i++)
    {
        fout<<DIST[i]<<" ";
    }
    return 0;
}