Pagini recente » Cod sursa (job #2876213) | Cod sursa (job #3171939) | Cod sursa (job #2607682) | Cod sursa (job #764230) | Cod sursa (job #1459363)
#include <iostream>
#include <stdio.h>
#include <vector>
#include <set>
#define Max 99999999
#define NMax 50099
using namespace std;
vector <int> Graf[NMax],Cost[NMax];
int d[NMax],N,M;
FILE *f=fopen("dijkstra.in","r");
FILE *g=fopen("dijkstra.out","w");
set <pair<int,int> > Heap;
void Initialization()
{
for(int i=2;i<=N;i++)
d[i]=Max;
Heap.insert(make_pair(0,1));
}
void Citire()
{
int x,y,z;
fscanf(f,"%d%d",&N,&M);
for(int i=1;i<=M;i++)
{
fscanf(f,"%d%d%d",&x,&y,&z);
Graf[x].push_back(y);
Cost[x].push_back(z);
}
}
void Dijkstra()
{
int x,val;
Initialization();
while(!Heap.empty())
{
val=(*Heap.begin()).first;
x=(*Heap.begin()).second;
Heap.erase(Heap.begin());
for(int i=0;i<Graf[x].size();i++)
if(d[Graf[x][i]]>d[x]+Cost[x][i])
{
d[Graf[x][i]]=d[x]+Cost[x][i];
Heap.insert(make_pair(d[Graf[x][i]],Graf[x][i]));
}
}
}
void Write()
{
for(int i=2;i<=N;i++)
if(d[i]==Max)
fprintf(g,"0 ");
else
fprintf(g,"%d ",d[i]);
}
int main()
{
Citire();
Dijkstra();
Write();
}