Cod sursa(job #896748)

Utilizator SPDionisSpinei Dionis SPDionis Data 27 februarie 2013 17:04:05
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>
#include <utility>
#include <map>


struct edge
{
    int s,n,w;
};

const int inf = 10000;
int N,M;
using std::vector;
using std::map;
std::ifstream in("dijkstra.in");
std::ofstream out("dijkstra.out");
vector<int> dist,prec;
vector<edge> a;

void read()
{
    in >> N >> M;
    dist.resize(N+1,inf);
    dist[1] = 0;
    prec.resize(N+1);
    for (int i = 0; i < M; ++i)
    {
        edge temp;
        in >> temp.s >> temp.n >> temp.w;
        a.push_back(temp);
    }
}

int main()
{

    read();
    for (int i = 1; i < N; ++i)
        for (int j = 0; j < a.size(); ++j)
        if ( dist[ a[j].s ] + a[j].w  < dist[ a[j].n ] )
    {
        dist[ a[j].n ] = dist[ a[j].s ] + a[j].w;
        prec[ a[j].n ] = a[j].s;
    }

    for (int i = 2; i < dist.size(); ++i)
        if ( dist[i] != inf ) out << dist[i] << " ";
        else out << 0 << " ";


    in.close();
    out.close();
    return 0;
}