Pagini recente » Cod sursa (job #433253) | Cod sursa (job #512379) | Cod sursa (job #89647) | Cod sursa (job #1402623) | Cod sursa (job #1836309)
#include <fstream>
#include <vector>
#include <climits>
#define maxn 50002
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
vector <pair <int, int> > g[maxn];
int n, m;
int dist[maxn], viz[maxn];
void read()
{
int x, y, c;
fin >> n >> m;
for (int i = 0; i < m; i++) {
fin >> x >> y >> c;
g[x].push_back(make_pair(y, c));
}
}
void write()
{
for (int i = 2; i <= n; i++)
if (dist[i] == INT_MAX)
fout << 0 << ' ';
else
fout << dist[i] << ' ';
}
void djkistra()
{
int minv, poz, ok = 1;
vector <pair <int, int> >::iterator it;
viz[1] = 1;
for (int i = 2; i <= n; i++)
dist[i] = INT_MAX;
for (it = g[1].begin(); it != g[1].end(); it++)
dist[it->first] = it->second;
while (ok == 1) {
minv = INT_MAX;
for (int i = 2; i <= n; i++)
if (viz[i] == 0 && dist[i] < minv) {
poz = i;
minv = dist[i];
}
if (minv == INT_MAX)
ok = 0;
else {
viz[poz] = 1;
for (it = g[poz].begin(); it != g[poz].end(); it++)
if (dist[it->first] > dist[poz] + it->second)
dist[it->first] = dist[poz] + it->second;
}
}
}
int main()
{
read();
djkistra();
write();
return 0;
}