Cod sursa(job #2840090)

Utilizator Abramiuc_AndreiAbramiuc Andrei Abramiuc_Andrei Data 27 ianuarie 2022 09:08:54
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#define inf 2100000000
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");



int n,s;
bool viz[101];
int d[101],mat[101][101];
int main()
{


    fin>>n>>s;
    for(int i=1;i<=n;i++)
        d[i]=inf;
    d[s]=0;

    int i,j,c;
    while(fin>>i>>j>>c){
        mat[i][j]=c;

        if(i==s)
            d[j]=c;
    }

    viz[s]=1;
    for(int k=1;k <n;k++)
    {
        int ind,minn;
        ind=-1;minn=inf;
        for(i=1;i<=n;i++)
            if(!viz[i] && d[i]!=inf && d[i]<minn)
                minn=d[i], ind=i;
        //determinam urmatorul nod la care se ajunge cu lungime minima

     if(ind!=-1){
        viz[ind]=1;
        for(i=1;i<=n;i++)
            if(!viz[i] && mat[ind][i]!=0 && d[i]>d[ind]+mat[ind][i])
                d[i]=d[ind]+mat[ind][i];
     }

    }
    for(int i=1;i<=n;i++){
        if(d[i]==inf) d[i]=-1;
        fout<<d[i]<<' ';
    }

    return 0;
}