Cod sursa(job #2974317)

Utilizator davidbostinaBostina David davidbostina Data 3 februarie 2023 20:36:32
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int nmax=50005;
const int oo= (1<<30);
int n,m,drum[nmax];
bool inCoada[nmax];
vector< pair<int,int> >muchii[nmax];

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

priority_queue <int, vector <int> , comparaDistanta> Coada;



void djakstra(int nodstart)
{
    for(int i=1;i<=n;i++)
    {
        drum[i]=oo;
    }
    drum[nodstart]=0;
    Coada.push(nodstart);
    inCoada[nodstart]=true;
    while(!Coada.empty())
    {
        int nodcurent=Coada.top();
        Coada.pop();
        inCoada[nodcurent]=false;
        for(unsigned int i=0;i<muchii[nodcurent].size();i++)
        {
            int vecin=muchii[nodcurent][i].first;
            int cost=muchii[nodcurent][i].second;
            if( drum[nodcurent]+cost<drum[vecin] )
            {
                drum[vecin]=drum[nodcurent]+cost;
                Coada.push(vecin);
                inCoada[vecin]=true;
            }
        }
    }
}


void citire()
{
    int i,x,y,c;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>c;
        muchii[x].push_back( make_pair(y,c) );
    }
    djakstra(1);
}




void afisare()
{
    for(int i=2;i<=n;i++)
    {
        if(drum[i]!=oo)
        {
            fout<<drum[i]<<" ";
        }
        else
        {
            fout<<"0 ";
        }
    }
}


int main()
{

citire();
afisare();


return 0;
}