Cod sursa(job #2352582)

Utilizator Username01Name Surname Username01 Data 23 februarie 2019 14:10:03
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <cstdio>
#include <queue>
#include <vector>
#define N 50002
#define INF 2000000000

using namespace std;
FILE *f,*g;

struct bla
{
    int no,co;
};
struct cmp
{
    bool operator() (bla A, bla B)
    {
        return (A.co>B.co);
    }
};
priority_queue <bla, vector <bla>,cmp>q;
struct bla1
{
    int ve,c;
};
vector <bla1> graf[N];
int dist[N];
bool viz[N];

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

    }
    for(int i=2;i<=n;++i)
        if(dist[i]==INF)
            fprintf(g,"0 ");
        else
            fprintf(g,"%d ",dist[i]);
    fclose(f);
    fclose(g);
    return 0;
}