Cod sursa(job #1691665)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 19 aprilie 2016 08:39:35
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include<iostream>
#include <vector>
#include <queue>
#include <algorithm>
#define N 50013
using namespace std;
struct imp {int nod,val;};
int n,m;
fstream f,g;
vector <pair <int ,int  > > v[N];
int sol[N];
class cmp
{
    public:
        bool operator () (imp a, imp b)
        {
            return a.val>b.val;
        }
};
void dijkstra (int start)
{
    int i, nodc, costc,nr,l,nod;
    imp w,r;
    r.nod=start;
    r.val=0;
    //priority_queue <imp,vector<imp>, cmp > q;
    queue <imp> q;
    q.push(r);
    while (!q.empty())
    {
        w=q.front();
        nod=w.nod;
        q.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;
                r.nod=nodc;
                r.val=sol[nodc];
                q.push(r);
            }
        }
    }
}
int main()
{
    f.open("dijkstra.in",ios::in);
    g.open("dijkstra.out",ios::out);
    f>>n>>m;
    int i,x,y,z;
    for (i=1;i<=m;i++)
    {
        f>>x>>y>>z;
        v[x].push_back(make_pair(y,z));
        //v[y].push_back(make_pair(x,z));
    }
    dijkstra(1);
    for (i=2;i<=n;i++)
        g<<sol[i]<<" ";
}