Pagini recente » Cod sursa (job #2824407) | Cod sursa (job #2250257) | Cod sursa (job #1735922) | Cod sursa (job #2605025) | Cod sursa (job #3169336)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int MAX_NODES = 5000;
vector<int> graph[MAX_NODES + 1];
int nodesDistance[MAX_NODES + 1][MAX_NODES + 1];
int minDistance[MAX_NODES + 1];
void gen(int noNodes, int startNode) {
for (vector<int>::iterator it = graph[startNode].begin(); it < graph[startNode].end(); ++it) {
if (minDistance[*it] == 0) {
minDistance[*it] = minDistance[startNode] + nodesDistance[startNode][*it];
} else {
minDistance[*it] = min(minDistance[startNode] + nodesDistance[startNode][*it], minDistance[*it]);
}
gen(noNodes, *it);
}
}
int main() {
int noNodes, noArches;
fin >> noNodes >> noArches;
for (int i = 1; i <= noArches; ++i) {
int start, end, distance;
fin >> start >> end >> distance;
graph[start].push_back(end);
nodesDistance[start][end] = distance;
}
gen(noNodes, 1);
for (int i = 2; i <= noNodes; ++i) {
fout << minDistance[i] << ' ';
}
return 0;
}
/*
5 6
1 2 1
1 4 2
4 3 4
2 3 2
4 5 3
3 5 6
=>
1 3 2 5
5 6
1 4 10
1 3 9
1 2 8
4 5 9
3 5 10
2 5 11
=>
8 9 10 19
7 7
1 4 10
1 3 9
1 2 8
4 5 9
3 5 10
2 5 11
6 7 100
=>
8 9 10 19 0 0
3 1
2 3 20000
=>
0 0
*/