Cod sursa(job #1923684)

Utilizator Julian.FMI Caluian Iulian Julian. Data 11 martie 2017 21:27:34
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 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,muchii;
int dmin[nmax],prec[nmax],viz[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;
muchii=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;
    dmin[start]=0;
    H.push(start);

    while(!H.empty())
    {vfmin=H.top();
           H.pop();
       if(muchii<200999){
       if(viz[vfmin]==1)continue;
       viz[vfmin]=1;
       }

        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;
               H.push(G[vfmin][i].first);
        }
    }
}

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

}