Pagini recente » Cod sursa (job #941271) | Cod sursa (job #161123) | Cod sursa (job #1840937) | Cod sursa (job #1382719) | Cod sursa (job #1447676)
#include <fstream>
#include <vector>
#define NMax 50010
#define INF 2000000000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int nodes, edges, distances[NMax];
bool mark[NMax];
vector< pair<int, int> > G[NMax];
int main()
{
f >> nodes >> edges;
int n1, n2, c;
for (int i = 1; i <= edges; i++) {
f >> n1 >> n2 >> c;
G[n1].push_back(make_pair(n2, c));
}
for (int i = 1; i <= nodes; i++)
distances[i] = INF;
distances[1] = 0;
for (int i = 1; i <= nodes; i++) {
int Min = INF, pos = 0;
for (int j = 1; j <= nodes; j++) {
if (Min > distances[j] && !mark[j]) {
Min = distances[j];
pos = j;
}
}
if (Min == INF)
break;
mark[pos] = true;
for (vector< pair<int, int> >::iterator it = G[pos].begin(); it != G[pos].end(); it++)
if (distances[pos] + it->second < distances[it->first])
distances[it->first] = distances[pos] + it->second;
}
for (int i = 2; i <= nodes; i++) {
if (distances[i] == INF)
g << "0 ";
else
g << distances[i] << " ";
}
return 0;
}