Cod sursa(job #1459363)

Utilizator Liviu98Dinca Liviu Liviu98 Data 9 iulie 2015 17:42:06
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <stdio.h>
#include <vector>
#include <set>
#define Max 99999999
#define NMax 50099
using namespace std;
vector <int> Graf[NMax],Cost[NMax];
int d[NMax],N,M;
FILE *f=fopen("dijkstra.in","r");
FILE *g=fopen("dijkstra.out","w");
set <pair<int,int> > Heap;

void Initialization()
{
    for(int i=2;i<=N;i++)
        d[i]=Max;
    Heap.insert(make_pair(0,1));
}

void Citire()
{
    int x,y,z;
    fscanf(f,"%d%d",&N,&M);
    for(int i=1;i<=M;i++)
    {
        fscanf(f,"%d%d%d",&x,&y,&z);
        Graf[x].push_back(y);
        Cost[x].push_back(z);
    }
}

void Dijkstra()
{
    int x,val;
    Initialization();
    while(!Heap.empty())
    {
        val=(*Heap.begin()).first;
        x=(*Heap.begin()).second;
        Heap.erase(Heap.begin());
        for(int i=0;i<Graf[x].size();i++)
            if(d[Graf[x][i]]>d[x]+Cost[x][i])
            {
                d[Graf[x][i]]=d[x]+Cost[x][i];
                Heap.insert(make_pair(d[Graf[x][i]],Graf[x][i]));
            }
    }
}

void Write()
{
    for(int i=2;i<=N;i++)
        if(d[i]==Max)
        fprintf(g,"0 ");
        else
            fprintf(g,"%d ",d[i]);
}

int main()
{
    Citire();
    Dijkstra();
    Write();
}