Pagini recente » Cod sursa (job #666234) | Cod sursa (job #559297) | Cod sursa (job #3270286) | Cod sursa (job #3210787) | Cod sursa (job #186127)
Cod sursa(job #186127)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <set>
using namespace std;
#define N 50176
#define INF 0x3f3f3f3f
int sol[N];
vector <int> graf[N], cost[N];
set<pair<int, int> > t;
char buffer[1024], *current;
int get()
{
while (*current < '0' || '9' < *current)
current++;
int n = 0;
while ('0' <= *current && *current <= '9')
n = n * 10 + *(current++) - '0';
return n;
}
int main()
{
freopen("dijkstra.in", "rt", stdin);
freopen("dijkstra.out", "wt", stdout);
int m, n, a, b, c, i;
gets(buffer);
current = buffer;
n = get(); m = get();
for (i = 0; i < m; i++)
{
gets(buffer);
current = buffer;
a = get(); b = get(); c = get();
graf[a].push_back(b);
cost[a].push_back(c);
}
memset(sol, 0x3f, (n + 1) * sizeof(int));
sol[1] = 0;
t.insert(make_pair(0, 1));
int val, nod, nod2, sum;
set< pair<int ,int> >::iterator start;
while (t.size())
{
start = t.begin();
val = (*start).first;
nod = (*start).second;
t.erase(*start);
for (i = 0; i < (int)graf[nod].size(); i++)
{
nod2 = graf[nod][i];
sum = val + cost[nod][i];
if (sol[nod2] > sum)
{
sol[nod2] = sum;
t.insert(make_pair(sum, nod2));
}
}
}
for (int i = 2; i <= n; i++)
if (sol[i] != INF)
printf("%d ", sol[i]);
else
printf("0 ");
printf("\n");
return 0;
}