Cod sursa(job #2366906)

Utilizator bodea.georgianaBodea Georgiana bodea.georgiana Data 4 martie 2019 22:51:15
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#define N 50002
#define INF 2000000000
#include <vector>
#include <queue>

using namespace std;
FILE *f,*g;

struct bla
{
    int ve,co;
};
vector <bla> graph[N];
struct cmp
{
    bool operator ()(bla A, bla B)
    {
        return (A.co>B.co);
    }
};
priority_queue <bla, vector <bla>, cmp> q;
int d[N];

void dijkstra(int nod)
{
    d[nod]=0;
    q.push({nod,0});
    int dist;
    while(!q.empty())
    {
        nod=q.top().ve;
        dist=q.top().co;
        q.pop();
        for(int i=0;i<graph[nod].size();++i)
            if(d[graph[nod][i].ve]>d[nod]+graph[nod][i].co)
            {
                d[graph[nod][i].ve]=d[nod]+graph[nod][i].co;
                q.push({graph[nod][i].ve,d[graph[nod][i].ve]});
            }
    }
}
int main()
{
    f=fopen("dijkstra.in","r");
    g=fopen("dijkstra.out","w");
    int n,m;
    fscanf(f,"%d %d",&n,&m);
    int x,y,z;
    for(int i=1;i<=m;++i)
    {
        fscanf(f,"%d %d %d",&x,&y,&z);
        graph[x].push_back({y,z});
    }
    for(int i=1;i<=n;++i)
        d[i]=INF;
    dijkstra(1);
    for(int i=2;i<=n;++i)
        if(d[i]==INF)
            fprintf(g,"0 ");
        else
            fprintf(g,"%d ",d[i]);
    return 0;
}