Pagini recente » Cod sursa (job #2523995) | Cod sursa (job #2132732) | Cod sursa (job #2798832) | Cod sursa (job #265897) | Cod sursa (job #486442)
Cod sursa(job #486442)
#include <cstdio>
#include <fstream>
#include <limits>
#include <queue>
#include <vector>
#include <utility>
void mainQueue()
{
//std::ifstream in("dijkstra.in");
//std::ofstream out("dijkstra.out");
FILE *file = fopen("dijkstra.in", "r");
int nodeCount, arcCount;
//in >> nodeCount >> arcCount;
fscanf(file, "%d %d", &nodeCount, &arcCount);
std::vector<std::vector<std::pair<int, int> > > nodeMatrix(nodeCount + 1);
std::queue<int> Q;
for (int i = 0; i < arcCount; i++)
{
int source, destination, length;
//in >> source >> destination >> length;
fscanf(file, "%d %d %d", &source, &destination, &length);
nodeMatrix[source].push_back(std::pair<int, int>(destination, length));
}
fclose(file);
std::vector<int> D(nodeCount + 1, std::numeric_limits<int>::max());
D[1] = 0;
Q.push(1);
while (!Q.empty())
{
int s = Q.front();
Q.pop();
for (unsigned int i = 0; i < nodeMatrix[s].size(); i++)
{
int x = nodeMatrix[s][i].first;
int y = nodeMatrix[s][i].second;
if (D[x] > D[s] + y)
{
D[x] = D[s] + y;
Q.push(x);
}
}
}
file = fopen("dijkstra.out", "w");
for (int i = 2; i <= nodeCount; ++i)
fprintf(file, "%d ", (D[i] == std::numeric_limits<int>::max() ? 0 : D[i]));
fclose(file);
}
int main()
{
mainQueue();
}