Cod sursa(job #1579465)

Utilizator martonsSoos Marton martons Data 24 ianuarie 2016 19:32:30
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>
#include <vector>
#include <climits>

#define INF INT_MAX/2-1

using namespace std;

struct nod{
    bool vis;
    int dst;
    vector< pair<int, int> > v;
};

int main()
{
    ifstream in("dijkstra.in");
    int n, m;
    in>>n>>m;

    nod w[50001]={false, INF};

    for(int i=0;i<m;i++){
        int a, b, d;
        in>>a>>b>>d;
        w[a].dst=INF;
        w[b].dst=INF;
        w[a].vis=false;
        w[b].vis=false;
        w[a].v.push_back(make_pair(b, d));
    }

    int crt=1;
    bool f=true;
    w[crt].dst=0;

    while(f){
        for(int i=0;i<w[crt].v.size();i++){
            if(w[crt].v[i].second+w[crt].dst<w[w[crt].v[i].first].dst){
                w[w[crt].v[i].first].dst=w[crt].v[i].second+w[crt].dst;
            }
        }

        w[crt].vis=true;
        pair<int, int> minim=make_pair(0, INF);
        for(int i=1;i<=n;i++){
            if(w[i].vis==false&&w[i].dst<minim.second){
                minim=make_pair(i, w[i].dst);
            }
        }

        crt=minim.first;
        if(minim.first==0)f=false;
    }

    ofstream out("dijkstra.out");
    for(int i=2;i<=n;i++){
        out<<(w[i].dst!=INF?w[i].dst:0)<<" ";
    }
    return 0;
}