Pagini recente » Cod sursa (job #324608) | Cod sursa (job #1522903) | Cod sursa (job #933452) | Cod sursa (job #627600) | Cod sursa (job #1429616)
#include <stdio.h>
#include <algorithm>
#include <queue>
using namespace std;
FILE* f;
FILE* r;
int N, M, S;
vector< pair<int, int> > g[50009];
int dist[50009];
bool inQ[50009];
void read()
{
f = fopen("dijkstra.in", "r");
fscanf(f, "%d%d", &N, &M);
for (int i = 0; i < M; ++i)
{
int x, y, d;
fscanf(f, "%d%d%d", &x, &y, &d);
g[x].push_back(make_pair(y, d));
}
}
void dijkstra()
{
queue<int> q;
q.push(1);
dist[1] = 0;
while (!q.empty())
{
int x = q.front();
q.pop();
inQ[x] = false;
for (int i = 0; i < g[x].size(); ++i)
{
if (dist[x] + g[x][i].second < dist[g[x][i].first])
{
dist[g[x][i].first] = dist[x] + g[x][i].second;
if (!inQ[g[x][i].first])
{
q.push(g[x][i].first);
inQ[g[x][i].first] = true;
}
}
}
}
}
int main()
{
read();
for (int i = 0; i <= N; i++)
dist[i] = 0x3f3f3f3f;
dijkstra();
r = fopen("dijkstra.out", "w");
for (int i = 2; i <= N; i++)
{
fprintf(r, "%d ", (dist[i] < 0x3f3f3f3f ? dist[i] : 0));
}
return 0;
}