Cod sursa(job #1336946)

Utilizator alexander34roArdelean Alexandru Andrei alexander34ro Data 8 februarie 2015 14:39:11
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <vector>
#define oo 240000000
#define N 10000
using namespace std;

ifstream f("dikjstra.in");
ofstream g("dikjstra.out");

int n,m;
vector< pair<int,int> > graf[N];
int d[N],viz[N];

void citeste()
{
    f>>n>>m;
    int k,x,y;
    pair <int,int> p;
    for(int i=1;i<=n;i++){
        f>>x>>y>>k;
        p=make_pair(y,k);
        graf[x].push_back(p);
    }
}

void dikjstra()
{
    unsigned int i,j,vecin,cost;
    for(i=2;i<=n;i++) d[i]=oo;
    for(i=1;i<=n;i++){
        int minv=oo,nod;
        for(j=1;j<=n;j++)
            if(d[j]<minv&&viz[j]==0) minv=d[j],nod=j;
        viz[nod]=1;
        for(j=0;j<graf[nod].size();j++){
            vecin=graf[nod][j].first,cost=graf[nod][j].second;
            if(d[nod]+cost<d[vecin]) d[vecin]=d[nod]+cost;
        }
    }
}

void afiseaza()
{
    int i;
    for(i=2;i<=n;i++)
        if(d[i]==oo) d[i]=0;
    for(i=2;i<=n;i++) g<<d[i]<<' ';
    g<<'\n';
}

int main()
{
    citeste();
    dikjstra();
    afiseaza();
    return 0;
}