Pagini recente » Cod sursa (job #869756) | Cod sursa (job #2640903) | Cod sursa (job #288807) | Cod sursa (job #2881228) | Cod sursa (job #2206081)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define INF 1e5
using namespace std;
void read(int &n, int &m, vector<vector<pair<int,int>>> &G) {
ifstream fin("dijkstra.in");
if (!fin.is_open()) {
cout << "The file can't be opened!\n";
exit(EXIT_FAILURE);
}
fin >> n >> m;
G.resize(n + 1);
for (int i = 0; i < m; ++i) {
int x, y, cost;
fin >> x >> y >> cost;
G[x].emplace_back(y, cost);
G[y].emplace_back(x, cost);
}
fin.close();
}
void dijkstra(int n, vector<vector<pair<int, int>>> G) {
vector<int> d(n + 1, INF);
vector<int> viz(n + 1, 0);
vector<int> tata(n + 1, 0);
d[1] = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> Q;
Q.push({d[1], 1});
while (!Q.empty()) {
int u = Q.top().second;
Q.pop();
if (viz[u] == 0) {
for (auto it : G[u]) {
int v = it.first;
int Wuv = it.second;
if(viz[v] == 0 && d[u] + Wuv < d[v]) {
d[v] = d[u] + Wuv;
tata[v] = u;
Q.push({d[v], v});
}
}
viz[u] = 1;
}
}
ofstream fout("dijkstra.out");
for (int i = 2; i <= n; ++i) {
if (d[i] == INF)
fout << 0 << ' ';
else
fout << d[i] << ' ';
}
fout.close();
}
int main() {
int n, m;
vector<vector<pair<int, int>>> G;
read(n, m, G);
dijkstra(n, G);
return 0;
}