Cod sursa(job #2707579)

Utilizator NorbiNORBI KOVER Norbi Data 17 februarie 2021 13:09:18
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstdlib>
#include<queue>
using namespace std;
FILE *f=fopen("dijkstra.in","r");
FILE *g=fopen("dijkstra.out","w");

const int oo=(1<<30);

int N;
long M;
int D[50001];

vector <pair<int ,int> > G[50001];


void Citeste()
{
    fscanf(f,"%d%d",&N,&M);
    for(int i=1;i<=M;i++)
    {
        int x,y,dist;
        fscanf(f,"%d%d%d",&x,&y,&dist);
        G[x].push_back(make_pair(y,dist));
    }
}
void Afiseaza()
{
    for(int i=2;i<=N;i++)
    {
       if(D[i]!=oo)
         fprintf(g,"%d ",D[i]);
       else fprintf(g,"0 ");
    }
}
void Dijkstra(int nodStart)
{
    for(int i=1;i<=N;i++)
        D[i]=oo;
    D[nodStart]=0;
    int c[50001];int p=0,u=0;
    c[0]=nodStart;
    while(p<=u)
    {
        int nodCurent = c[p];

        for(unsigned i =0;i<G[nodCurent].size();i++)
        {
            int nodVecin = G[nodCurent][i].first;
            int Cost = G[nodCurent][i].second;

            if(D[nodCurent]+Cost<D[nodVecin])
            {
                D[nodVecin]=D[nodCurent]+Cost;
                u++;
                c[u]=nodVecin;
            }
        }
        p++;
    }
}
int main()
{
   Citeste();
   Dijkstra(1);
   Afiseaza();
   fclose(f);
   fclose(g);
   return 0;
}