Cod sursa(job #900043)

Utilizator andreas_mihAndreas Mihaloianis andreas_mih Data 28 februarie 2013 17:26:56
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<queue>
#define mp make_pair
#define pii pair<int,int>
using namespace std;
FILE*in=fopen("dijkstra.in","r");
FILE*out=fopen("dijkstra.out","w");
int noduri,muchii,dist[50001];
priority_queue < pii ,vector< pii >, greater< pii > > q;
vector <pair<int,int> > v[50001];
int main()
{
    fscanf(in,"%d%d",&noduri,&muchii);
    for(int i=2;i<=noduri;++i)
        dist[i]=(1<<30)-1;
    for(int i=1;i<=muchii;++i)
    {
        int data1,data2,data3;
        fscanf(in,"%d%d%d",&data1,&data2,&data3);
        v[data1].push_back(mp(data2,data3));
        v[data2].push_back(mp(data1,data3));
    }
    q.push(mp(1,0));
    while(!q.empty())
    {
        pair<int,int> curent=q.top();
        q.pop();
        for(int i=0;i<(int)v[curent.first].size();++i)
        {
            if(dist[v[curent.first][i].first]>dist[curent.first]+v[curent.first][i].second)
            {
                dist[v[curent.first][i].first]=dist[curent.first]+v[curent.first][i].second;
                q.push(mp(v[curent.first][i].first,dist[v[curent.first][i].first]));
            }
        }
    }
    for(int i=2;i<=noduri;++i)
        if(dist[i])
            fprintf(out,"%d ",dist[i]);
        else
            fprintf(out,"0 ");

fclose(in);
fclose(out);
return 0;
}