Cod sursa(job #2874838)

Utilizator matei8787Matei Dobrea matei8787 Data 20 martie 2022 12:41:28
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include<bits/stdc++.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int INF = 1e9;
struct Nod
{
    int nr, cost;
    Nod(int _nr, int _cost)
    {
        this -> nr = _nr;
        this -> cost = _cost;
    }
};
vector<Nod> graf[50005];
vector<int> pula_mea;
int n, p, m;
void citire()
{
    in>>n>>m;
    int x, y, c;
    for ( int i = 1 ; i <= m ; i++ )
    {
        in>>x>>y>>c;
        Nod aux(y,c);
        graf[x].push_back(aux);
        aux.nr = x;
        graf[y].push_back(aux);
    }
}
bool viz[50005];
void dijkstra (int start)
{
    vector<int> ans(n + 1, INF);
    queue<int> q;
    q.push(start);
    ans[start] = 0;
    while (!q.empty())
    {
        int idk = q.front();
        for ( Nod _nod : graf[idk] )
        {
            if ( ans[_nod.nr] > _nod.cost + ans[idk] )
            {
                ans[_nod.nr] = _nod.cost + ans[idk];
                if ( !viz[_nod.nr] )
                {
                    viz[_nod.nr] = true;
                    q.push(_nod.nr);
                }
            }
        }
        q.pop();
    }
    pula_mea = ans;
}
void afisare()
{
    for ( int i = 2 ; i < pula_mea.size(); i++ )
    {
        out<<( pula_mea[i] == INF ? 0 : pula_mea[i] )<<" ";
    }
}
int main()
{
    citire();
    dijkstra(1);
    afisare();
    return 0;
}