Cod sursa(job #2443367)

Utilizator laurentiu21Laurentiu Cretu laurentiu21 Data 27 iulie 2019 16:15:05
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#define INFINIT 0x3F3F3F3F
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,p,a[101][101],d[1000],s[1000],minim,poz;
int main()
{
    fin>>n>>p;
    for (int i=1; i<=n; i++)
        for (int j=1; j<=n; j++)
            if (i==j)
                a[i][j]=0;
            else
                a[i][j]=INFINIT;
    while (!fin.eof())
    {
        int x,y,z;
        fin>>x>>y>>z;
        a[x][y]=z;
    }
    fin.close();
    s[p]=1;
    for (int i=1; i<=n; i++)
         d[i]=a[p][i];
    for (int i=1; i<=n; i++)
    {
        minim=INFINIT;
        for(int j=1; j<=n; j++)
            if (s[j]==0 && d[j]<minim)
            {
                minim=d[j];
                poz=j;
            }
        s[poz]=1;
        for (int j=1; j<=n; j++)
            if (s[j]==0 && d[j]>d[poz]+a[poz][j])
                d[j]=d[poz]+a[poz][j];
    }
    for (int i=1; i<=n; i++)
        if (d[i]<INFINIT)
            fout<<d[i]<<" ";
        else
            fout<<0<<" ";
    fout.close();
    return 0;
}