Cod sursa(job #3001594)

Utilizator Marius2605Tompea Marius Marius2605 Data 13 martie 2023 19:45:36
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
using namespace std;
ifstream fin("dijkstra2.in");
ofstream fout("dijkstra2.out");
#define inf 2000000002
int n,m,x,y,viz[100002],start[100002],nrc,cost,d[100002],coada[100002],pr,ul,nr,k,p;
struct nod
{
    int vecin,cost,leg;
}L[500002];

int main()
{
    fin>>n >> m >>p;
    k=0;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y >> cost;
        k++;
        L[k].vecin=y;
        L[k].cost=cost;
        L[k].leg=start[x];
        start[x]=k;
        k++;
        L[k].vecin=x;
        L[k].cost=cost;
        L[k].leg=start[y];
        start[y]=k;
    }
    for (int j = 1; j <= n; ++j) {
        d[j]=inf;
    }
    d[p]=0;
    coada[1]=p;
    pr=1;
    ul=1;
    nr=1;
    viz[p]=1;
    while(nr>0){
        x=coada[pr];
        for (int i = start[x]; i!=0; i=L[i].leg) {
            y=L[i].vecin;
            if(d[y]>d[x]+L[i].cost){
                d[y]=d[x]+L[i].cost;
                if(viz[y]==0){
                    ul++;
                    if(ul>n){
                        ul=1;
                    }
                    coada[ul]=y;
                    viz[y]=1;
                    nr++;
                }
            }
        }
        pr++;
        viz[x]=0;
        if(pr>n){
            pr=1;
        }
        nr--;
    }
    for (int i = 1; i <= n; ++i) {
        if(d[i]==inf){
            fout << "-1 ";
        }else fout << d[i] << " ";
    }

    return 0;
}