Cod sursa(job #2970013)

Utilizator HaulicaTudorHaulica Tudor HaulicaTudor Data 24 ianuarie 2023 00:12:30
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>
#define INF 10000
using namespace std;
ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");
int v[105],a[105][105],d[105];
int n,p,x,y,c;

struct compara
{
    bool operator()(int x,int y)
    {
        return d[x]>d[y];
    }
};

priority_queue<int,vector<int>,compara> q;

void Dijkstra()
{
    while(!q.empty())
    {
        int x=q.top();
        q.pop();
        v[x]=0;
        for(int i=1;i<=n;++i)
            if(a[x][i]&&d[x]+a[x][i]<d[i])
            {
                d[i]=d[x]+a[x][i];
                if(v[i]==0)
                {
                    q.push(i);
                    v[i]=1;
                }
            }
    }
}

int main()
{
    fin >> n>>p;
    while(fin>>x)
    {
        fin >>y>>c;
        a[x][y]=c;
    }

    q.push(p);
    v[p]=1;
    for(int i=1;i<=n;i++)
        d[i]=INF;
    d[p]=0;
    Dijkstra();
    for(int i=1;i<=n;++i)
        if(d[i]!=INF)fout<<d[i]<<" ";
        else fout<<-1 <<" ";
    return 0;
}