Cod sursa(job #2344243)

Utilizator AlexTudorAlex Brinza AlexTudor Data 14 februarie 2019 21:39:59
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>
using namespace std;

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

const int INF=2000000000,NMAX=101;
int n,m,a[NMAX][NMAX];

void Initializare()
{
    int i,j;
    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            if(i==j) a[i][j]=0;
            else a[i][j]=INF;
}

void read()
{
    int x,y,c;
    for(int i=1;i<=m;++i) {fin>>x>>y>>c; a[x][y]=c;}
    fin.close();
}

void dijkstra(int x)
{
    int S[NMAX]={0},D[NMAX],T[NMAX],minim=INF;
    int i,k,imin,dmin;
    S[x]=1;
    for(i=1;i<=n;++i)
    {
        D[i]=a[x][i];
        if(D[i]<INF) T[i]=x;
        else T[i]=0;
    }
    T[x]=0;

    for(k=1;k<=n-1;++k)
    {
        dmin=INF;
        for(i=1;i<=n;++i)
            if(S[i]==0 && D[i]<dmin)
                {
                 dmin=D[i];
                 imin=i;
                }
         S[imin]=1;
         for(i=1;i<=n;++i)
            if(S[i]==0 && D[imin]+a[imin][i]<D[i])
                {
                 D[i]=D[imin]+a[imin][i];
                 T[i]=imin;
                }
    }

    for(i=2;i<=n;++i)
        if(D[i]==INF) fout<<0<<" ";
        else fout<<D[i]<<" ";
}

int main()
{

    fin>>n>>m;
    Initializare();
    read();
    dijkstra(1);
    return 0;
}