Cod sursa(job #2860873)

Utilizator popasebastian1213@gmail.comPopa Sebastian [email protected] Data 3 martie 2022 10:28:22
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <bits/stdc++.h>
#define NMAX 50004
#define INF 10000000000ll
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct varf
{
    int x,c;
};
int n,m,x0=1;
vector <varf> G[NMAX];
bool uz[NMAX];
int cmin[NMAX]= {0,100,10,-10,1,23,2};
void citire();
void dij();
void afisare();
class Compar
{
public:
    bool operator() (int a,int b)
    {
        return cmin[a]>cmin[b];
    }
};
priority_queue<int, vector <int>, Compar> H;
int main()
{
    citire();
    dij();
    afisare();
    return 0;
}
void citire()
{
    int i,j,c,k;
    varf aux;
    fin>>n>>m;
    for(k=1; k<=m; k++)
    {
        fin>>i>>j>>c;
        aux.x=j;
        aux.c=c;
        G[i].push_back(aux);
    }
    for(i=1; i<=n; i++)
        cmin[i]=INF;
    cmin[x0]=0;
}
void dij()
{
    int vfmin=-1,minim,i,j;
    H.push(x0);
    for(i=1; i<=n; i++)
    {
        while(!H.empty())
        {
            vfmin=H.top();
            H.pop();
            if(!uz[vfmin]) break;
        }
        if(vfmin==-1)
            break;
        uz[vfmin]=1;
       minim=cmin[vfmin];
        for(j=0; j<G[vfmin].size(); j++)
        {
            if(!uz[G[vfmin][j].x] && cmin[G[vfmin][j].x]> minim+G[vfmin][j].c)
                {
                 cmin[G[vfmin][j].x]=minim+G[vfmin][j].c ;
                 H.push(G[vfmin][j].x);
                }
        }
    }
}
void afisare()
{
    for(int i=2; i<=n; i++)
    {
        if(cmin[i]!=INF)
            fout<<cmin[i]<<" ";
        else
            fout<<0<<" ";
    }
}