Cod sursa(job #2502303)

Utilizator victorzarzuZarzu Victor victorzarzu Data 30 noiembrie 2019 17:39:21
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m;
short a[30001][30001];
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] = INFINITY;
    for(int i=1;i<=m;++i)
        {
            f>>x>>y>>c;
            a[x][y] = a[y][x] = c;
        }
    for(int i=1;i<=n;++i)
    {
        d[i] = a[1][i];
        pre[i] = 1;
    }
    pre[1] = 0;
    d[1] = 0;
    viz[1] = true;
    f.close();
}

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

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