Cod sursa(job #2216644)

Utilizator BiancaMariaVulsanVulsan Bianca Maria BiancaMariaVulsan Data 27 iunie 2018 15:26:33
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define inf 50001
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
unsigned int n,m, d[inf];
vector <int> a[inf], v[inf];
priority_queue < pair<int,int> > q;

void citire()
{
    int i,j,k,c;
    f>>n>>m;

    for(k=1; k<=m; k++)
    {
       f>>i>>j>>c;
       v[i].push_back(j);
       a[i].push_back(c);
    }
}

void dijkstra(int start)
{
    int i,mn,poz,k;

    for(i=2; i<=n; i++)
            d[i]=inf;

    q.push({0, start });
    while(!q.empty())
    {
        poz=q.top().second;
        q.pop();
        for(i=0; i<a[poz].size(); i++)
            if(d[v[poz][i]]>d[poz]+a[poz][i])
        {
            d[v[poz][i]]=d[poz]+a[poz][i];
            q.push({ -d[v[poz][i]], v[poz][i] });
        }
    }
}

int main()
{
    citire();
    dijkstra(1);
    for(int i=2; i<=n; i++)
        if(d[i]==inf)
        g<<0<<" ";
        else
        g<<d[i]<<" ";
    f.close();
    g.close();
    return 0;
}