Cod sursa(job #1902625)

Utilizator Train1Train1 Train1 Data 4 martie 2017 18:19:31
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <vector>
#define MAX_VALUE 999999999
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector <vector <pair<int, int> > > a;
vector <bool> selectat;
//vector <int> root;
vector <int> d;
int n, m;
int searchNod() {
    int min = MAX_VALUE, aux = 0;
    for (int i = 1; i <= n; i++) {
        if(d[i] < min && selectat[i] == false) {
            aux = i;
            min = d[i];
        }
    }
    return aux;
}
int main()
{
    fin>>n>>m;
    int x, y, z;
    d.resize(n + 1, MAX_VALUE);
    selectat.resize(n + 1);
    a.resize(n + 1);
    for (int i = 1; i <= m; i++) {
        fin>>x>>y>>z;
        a[x].push_back(make_pair(y, z));
    }
    int k = 1;
    d[k] = 0;
    while(k) {
        selectat[k] = true;
        for (int i = 0; i < a[k].size(); i++) {
            if(d[k] + a[k][i].second < d[a[k][i].first]) {
                d[a[k][i].first] = d[k] + a[k][i].second;
            }
        }
        k = searchNod();
    }
    for (int i = 2; i < d.size(); i++) {
        if(d[i] != MAX_VALUE)
        fout<<d[i]<<' ';
        else
        fout<<"0 ";
    }
    fin.close();
    fout.close();
    return 0;
}