Cod sursa(job #2524840)

Utilizator CriviCriveanu Bogdan Crivi Data 16 ianuarie 2020 14:13:43
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream in;
ofstream out;

#define INF 999999999;

vector <vector <pair <int,int> > > v;
queue < int > q;
vector < vector <int> > path;

int n,m,p,sf;
int dist[100002];
bool viz[100002];

void dijkstra2 (int start)
{
    
    for(int i=1; i<=n; i++)
        dist[i]=INF;
    dist[start]=0;
    viz[start]=1;
    q.push(start);
    while(!q.empty())
    {
        int i=q.front();
        q.pop();
        int m=v[i].size();
        for(int k=0; k<m; k++)
        {
            int j=v[i][k].first;
            int c=v[i][k].second;
            if(dist[j]>dist[i]+c)
            {
                dist[j]=dist[i]+c;
                viz[j]=1;
                q.push(j);
            }
        }
    }
}

int main()
{
    in.open("dijkstra.in");
    out.open("dijkstra.out");
    
    in>>n>>p;
    v.resize(n+2);
    int i,j,c;
    while(in>>i>>j>>c)
    {
        v[i].push_back( {j,c});
    }
    dijkstra2(1);
    for(int i=2; i<=n; i++)
        if(viz[i])
        {
            out<<dist[i]<<" ";

        }
        else out<<-1<<' ';
    return 0;
}