Cod sursa(job #2422707)

Utilizator SternulStern Cristian Sternul Data 19 mai 2019 18:53:35
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
#define oo 0x3f3f3f3f

using namespace std;

int extrag(int **d, bool **viz, int n){
    int min = oo;
    int rez;
    for(int i = 1;i <= n;i++){
        if((*viz)[i] == 0){
            if((*d)[i] < min){
                min = (*d)[i];
                rez = i;
            }
        }
    }
    (*viz)[rez] = 1;
    return rez;
}

int main()
{
    int n, m, st;
    int x, y, cost;
    int nr_viz = 0;
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");
    f>>n>>m;
    vector <vector < pair<int, int > > >G(n + 1);
    for(int i = 0;i < m;i++){
        f>>x>>y>>cost;
        G[x].push_back(make_pair(y, cost));
    }
    int *d = new int[n + 1];
    int *t = new int[n + 1];
    bool *viz = new bool[n + 1];
    for(int i = 0;i <= n;i++){
        d[i] = oo;
        t[i] = 0;
        viz[i] = 0;
    }
    st = 1;
    d[st] = 0;
    while(nr_viz < n){
        int u = extrag(&d, &viz, n);
        nr_viz++;
        pair< int, int > v;
        for(auto v : G[u]){
            if(d[v.first] > d[u] + v.second){
                d[v.first] = d[u] + v.second;
                t[v.first] = u;
            }
        }
    }
    for(int i = 2;i <= n;i++){
        if(d[i] == 00)
            cout<<0<<" ";
        else
            cout<<d[i]<<" ";
    }
}