Cod sursa(job #1832586)

Utilizator mateigabriel99Matei Gabriel mateigabriel99 Data 20 decembrie 2016 14:53:31
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <string.h>
#include <stdio.h>

#define NMax 50001
#define INF 999999

using namespace std;

//ifstream fin("dijkstra.in");
//ofstream fout("dijkstra.out");

int N,M,Dist[NMax];
vector<int> Graf[NMax],Cost[NMax];
set<pair<int,int> > Heap;

void Read();
void Write();

void Initialization()
{
    memset(Dist,INF,sizeof(Dist));
    Dist[1]=0;
    Heap.insert(make_pair(0,1));
}

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

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    Read();
    Dijkstra();
    Write();

    return 0;
}

void Read()
{
    //fin>>N>>M;
    scanf("%d%d",&N,&M);
    int x,y,z;
    for(int i=1;i<=M;i++)
    {
        //fin>>x>>y>>z;
        scanf("%d%d%d",&x,&y,&z);
        Graf[x].push_back(y);
        Cost[x].push_back(z);
    }
}

void Write()
{
    for(int i=2;i<=N;i++)
        if(Dist[i]>INF)
            //fout<<"0 ";
            printf("0 ");
        else
            //fout<<Dist[i]<<" ";
            printf("%d ",Dist[i]);
}