Cod sursa(job #2933801)

Utilizator alebbAlexandra Bochis alebb Data 5 noiembrie 2022 13:13:30
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector <pair<int, int>> lista[100005];
int dp[100005], x, y, c;

int citire(int &n, int &m, int &p){
    fin>>n>>m;
    p=1;
    for(int i=2; i<=m; i++){
        fin>>x>>y>>c;
        lista[x].push_back({y, c});
        lista[y].push_back({x, c});
    }
}

void bellman_ford(){
    int n, m, p;
    citire(n, m, p);
    queue <int> noduri;
    for(int i=1; i<=n; i++)
        dp[i]=-1;
    dp[p]=0;
    noduri.push(p);
    while(!noduri.empty()){
        int nod=noduri.front();
        noduri.pop();
        for(auto elem:lista[nod]){
            int cost;
            int vecin=elem.first;
            cost=dp[nod]+elem.second;
            if(dp[vecin]==-1 or dp[vecin]>cost){
                dp[vecin]=cost;
                noduri.push(vecin);
            }

        }
    }
    for(int i=1; i<=n; i++){
        if(dp[i]==-1) cout<<0<<' ';
        else fout<<dp[i]<<' ';
    }

}

int main()
{
    bellman_ford();
    return 0;
}