Cod sursa(job #1923655)

Utilizator Julian.FMI Caluian Iulian Julian. Data 11 martie 2017 20:47:03
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define INF 0x7FFFFFFF
#define nmax 100099
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,start;
int dmin[nmax],prec[nmax];
vector< pair< int ,int > > G[nmax];
class compa{
    public:
    bool operator()(const int&x,const int& y){
        return dmin[x]>dmin[y];
    }
};

priority_queue<int, vector<int> , compa > H;

void citire(){int m,x,y,c;
fin>>n;
fin>>m;
start=1;
while(m--){
    fin>>x>>y>>c;
    G[x].push_back(make_pair(y,c));
    }
}

void dijkstra(){
    int i,vfmin;
    for(i=1;i<=n;i++){dmin[i]=INF; prec[i]=start;}
    dmin[start]=0;prec[i]=0;
    H.push(start);
    while(!H.empty())
    {vfmin=H.top();
           H.pop();
        for(i=0; i<G[vfmin].size(); i++)
            if(dmin[G[vfmin][i].first]>
               dmin[vfmin] + G[vfmin][i].second)
        {   dmin[G[vfmin][i].first]=dmin[vfmin] + G[vfmin][i].second;
            prec[G[vfmin][i].first]=vfmin;
            H.push(G[vfmin][i].first);

        }
    }
}

int main(){
    citire();
    dijkstra();
    for(int i=2;i<=n;i++)fout<<dmin[i]<<' ';

}