Pagini recente » Cod sursa (job #1417508) | Cod sursa (job #1626942) | Cod sursa (job #3225710) | Cod sursa (job #1022004) | Cod sursa (job #1707214)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
struct cell {
int vec;
int cost;
};
vector <cell> graf[30002];
queue <int> coada;
int dist[30002];
bool vizitat[30002];
void bfs() {
int nodAct;
int i;
while (!coada.empty()) {
nodAct = coada.front();
coada.pop();
for (i = 0; i < graf[nodAct].size(); i++) {
if (vizitat[graf[nodAct][i].vec] == false) {
if (graf[nodAct][i].vec > nodAct) {
dist[graf[nodAct][i].vec] = dist[nodAct] + graf[nodAct][i].cost;
} else {
dist[graf[nodAct][i].vec] = dist[nodAct] - graf[nodAct][i].cost;
}
coada.push(graf[nodAct][i].vec);
vizitat[graf[nodAct][i].vec] = true;
}
}
}
}
int main() {
ifstream file_in ("sate.in");
ofstream file_out ("sate.out");
int n, m, x, y, u, v, d;
int i;
// Citirea datelor
file_in >> n >> m >> x >> y;
for (i = 0; i < m; i++) {
file_in >> u >> v >> d;
graf[u].push_back((cell){v, d});
graf[v].push_back((cell){u, d});
}
// Calcularea solutiei
coada.push(x);
dist[x] = 0;
vizitat[x] = 1;
bfs();
// Afisarea solutiei
file_out << dist[y];
return 0;
}