Cod sursa(job #2502331)

Utilizator victorzarzuZarzu Victor victorzarzu Data 30 noiembrie 2019 18:00:56
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
#define oo 20001
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,start = 1,dMin,VfMin;
short a[32001][32001];
int d[50001],pre[50001];
bool viz[50001];

void Citire()
{
    int x,y,c;
    f>>n>>m;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            a[i][j] = oo;
    for(int i=1;i<=m;++i)
    {
        f>>x>>y>>c;
        a[x][y] = c;
    }
    for(int i=1;i<=n;++i)
    {
        d[i] = a[start][i];
        pre[i] = start;
    }
    d[start] = 0;
    pre[start] = 0;
    viz[start] = true;
    f.close();
}

void Determinare()
{
    for(int j=1;j<n;++j)
    {
        dMin = oo;
        for(int i=1;i<=n;++i)
            if(!viz[i] && dMin > d[i])
            {
                dMin = d[i];
                VfMin = i;
            }
        viz[VfMin] = true;
        for(int i=1;i<=n;++i)
            if(!viz[i] && d[i] > dMin + a[VfMin][i])
            {
                pre[i] = VfMin;
                d[i] = dMin + a[VfMin][i];
            }
    }
}

int main()
{
    Citire();
    Determinare();
    for(int i=2;i<=n;++i)
        if(d[i] != oo) g<<d[i]<<" ";
        else g<<0<<" ";
    return 0;
}