Cod sursa(job #2420573)

Utilizator AndrulianDin Iulian Andrulian Data 12 mai 2019 18:16:05
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int nmax=10000;
const int INF=1<<30;
int a[nmax][nmax];
vector <int> d(nmax,INF);
bool viz[nmax];
int x,y,c;
int main()
{
    int n,p;
    fin>>n>>p;
    while(fin>>x>>y>>c)
        a[x][y]=c;
    for(int i=1; i<=n; i++)
        if(a[p][i])
            d[i]=a[p][i];
    d[p]=0;
    viz[p]=1;
    for(int k=1; k<=n; ++k)
    {
        int pmin=INF;
        for(int i=1; i<=n; ++i)
        {
            if(!viz[i] && d[i]<pmin)
                pmin=i;
        }
        if(pmin!=INF)
        {
            viz[pmin]=1;
            for(int j=1; j<=n; ++j)
            {
                if(!viz[j] && a[pmin][j]>0 && d[j]>d[pmin]+a[pmin][j])
                    d[j]=d[pmin]+a[pmin][j];
            }
        }
    }
    for(int i=2; i<=n; ++i)
        if(d[i]!=INF)
            fout<<d[i]<<" ";
        else
            fout<<-1<<" ";
}