Pagini recente » Cod sursa (job #2473357) | Cod sursa (job #1002821) | Cod sursa (job #167418) | Cod sursa (job #609741) | Cod sursa (job #3265846)
#include <fstream>
#include <vector>
#include <set>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
void DIJKSTRA(int startNode, int noNodes, vector<vector<pair<int,int>>> &graph) {
vector<int> distante(noNodes+1, 1e9);
set<pair<int,int>> Q;
distante[startNode] = 0;
Q.insert({0, startNode});
while(!Q.empty()) {
auto it = Q.begin();
int currentNode = it->second;
int distanta = it->first;
Q.erase(it);
for(auto neighbor : graph[currentNode]) {
int newNode = neighbor.first;
int newDistance = neighbor.second;
int totalDistance = distanta+newDistance;
if(totalDistance < distante[newNode]) {
auto f = Q.find({distante[newNode], newNode});
if(f!=Q.end())
Q.erase(f);
distante[newNode] = totalDistance;
Q.insert({totalDistance, newNode});
}
}
}
for(int i=2; i<=noNodes; i++) {
if(distante[i] == 1e9)
fout << 0 << ' ';
else
fout << distante[i] << ' ';
}
}
int main() {
int noNodes, noEdges;
fin >> noNodes >> noEdges;
vector<vector<pair<int,int>>> graph(noNodes+1, vector<pair<int,int>>());
for(int i=1; i<=noEdges; i++) {
int firstNode, secondNode, weight;
fin >> firstNode >> secondNode >> weight;
graph[firstNode].push_back({secondNode, weight});
graph[secondNode].push_back({firstNode, weight});
}
DIJKSTRA(1, noNodes, graph);
return 0;
}