Cod sursa(job #1603926)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 17 februarie 2016 20:38:26
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <math.h>
#include <vector>
#include <set>
#include <algorithm>
#include <cstring>
//#include <unordered_map>
#include <iomanip>
#include <time.h>
#include <stdio.h>
#include <bitset>
#include <map>
#define MAX 500000000000
//#include <iostream>
using namespace std;
ifstream cin("dijkstra.in);
ofstream cout("dijkstra.out");
vector<int> x[1000];
vector<int> co[1000];
int marked[1000], vec[1000];
void dijk(int vec[], int n)
{
    int nod = 0, val = 0, ok = 1;
    while(ok){
        ok = 0;
        int ma = 1<<30;
    for(int i = 0; i < x[nod].size(); i++)
        if(marked[x[nod][i]] == 0){
            vec[x[nod][i]] = min(vec[x[nod][i]], vec[nod] + co[nod][i]);
            ok = 1;
        }
    int cop = nod;
    for(int i = 0; i < n; i++)
        if(vec[i] < ma && marked[i] == 0){
            ma = vec[i];
            cop = i;
        }
    marked[cop] = 1;
    nod = cop;
    }
}
int main()
{
    int n, m, c, a, b;
    cin >> n >> m;
    for(int i = 0; i < m; i++){
        cin >> a >> b >> c;
        x[a - 1].push_back(b - 1);
        co[a - 1].push_back(c);
    }
    for(int i = 1; i <= n; i++)
        vec[i] = 1<<30;
    marked[0] = 1;
    dijk(vec, n);
    for(int i = 1; i < n; i++)
        cout << vec[i] << " ";
    return 0;
}