Cod sursa(job #968610)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 2 iulie 2013 12:58:33
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define N 50003
using namespace std;
int n,m,x,y,z,sol[N];
vector < pair <int , int > > v[N];
struct cmp
{
    bool operator () (int a, int b)
    {
        return (sol[a]>sol[b]);
    }
};
void dijkstra (int start)
{
    priority_queue <int , vector<int>, cmp> heap;
    int nod, nodc, costc,i;
    heap.push(start);
    while (!heap.empty())
    {
        nod=heap.top();
        heap.pop();
        for (i=0;i<v[nod].size();i++)
        {
            nodc=v[nod][i].first;
            costc=v[nod][i].second;
            if (sol[nodc]==0 || sol[nodc]>sol[nod]+costc)
            {
                sol[nodc]=sol[nod]+costc;
                heap.push(nodc);
            }
        }
    }
}
int main()
{
    fstream f,g;
    f.open("dijkstra.in",ios::in);
    g.open("dijkstra.out",ios::out);
    f>>n>>m;
    int i;
    for (i=1;i<=m;i++)
    {
        f>>x>>y>>z;
        v[x].push_back( make_pair(y,z));
    }
    dijkstra(1);
    for (i=2;i<=n;i++)
        g<<sol[i]<<" ";
}