Pagini recente » Cod sursa (job #1718189) | Cod sursa (job #1449758) | Cod sursa (job #1214053) | Cod sursa (job #838444) | Cod sursa (job #2408691)
#include <iostream>
#include <climits>
#include <cstdlib>
#include <vector>
#include <set>
using namespace std;
int *dist;
struct comp
{
bool operator()(const int a, const int b)
{
if(dist[a] < dist[b])
return true;
return false;
}
};
struct Arc
{
int dest;
int cost;
};
int main()
{
Arc temp;
int N,M;
int a,b,c;
int elCur;
int min = INT_MAX,nodNext;
FILE *in=fopen("dijkstra.in","r");
FILE *out=fopen("dijkstra.out","w");
fscanf(in,"%i %i",&N,&M);
set<int,comp> s;
vector <vector<Arc>> g(N);
dist = (int *)malloc(N * sizeof(int));
for(int x=0;x<N;x++)
dist[x] = INT_MAX;
for(int x=0;x<M;x++)
{
fscanf(in,"%i %i %i",&a,&b,&c);
a--;b--;
temp.dest = b;
temp.cost = c;
g[a].push_back(temp);
}
dist[0]=0;
s.insert(0);
while(!s.empty())
{
elCur = *(s.begin()) ;
s.erase(*(s.begin()));
for(Arc x:g[elCur])
{
if(dist[elCur] + x.cost < dist[x.dest])
{
s.erase(x.dest);
dist[x.dest] = dist[elCur] + x.cost;
s.insert(x.dest);
}
}
}
for(int x=1;x<N;x++)
dist[x]<INT_MAX?fprintf(out,"%i ",dist[x]):fprintf(out,"0 ");
return 0;
}