Pagini recente » Cod sursa (job #2391314) | Cod sursa (job #1772671) | Cod sursa (job #635895) | Cod sursa (job #1291007) | Cod sursa (job #1341391)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
struct Node
{
int index;
int distance;
};
int bfs(int src, int dest, vector<Node> v[], int N);
int main()
{
int N, M, X, Y, i, j, D, k;
ifstream f("sate.in");
f >> N >> M >> X >> Y;
vector<Node> v[N + 1];
Node newEntry;
for (k = 1; k <= M; k++)
{
f >> i >> j >> D;
newEntry.index = j;
newEntry.distance = D;
v[i].push_back(newEntry);
newEntry.index = i;
v[j].push_back(newEntry);
}
f.close();
ofstream g("sate.out");
g << bfs(X, Y, v, N);
g.close();
return 0;
}
int bfs(int src, int dest, vector<Node> v[], int N)
{
int distToSrc[N + 1], parent[N + 1];
bool visited[N + 1];
fill(visited, visited + N + 1, false);
distToSrc[src] = 0;
queue<int> q;
q.push(src);
visited[src] = true;
parent[src] = 0;
int current = src;
while (!q.empty() && current != dest)
{
current = q.front();
q.pop();
for (auto i = v[current].begin(); i != v[current].end(); i++)
if (!visited[i->index])
{
q.push(i->index);
parent[i->index] = current;
if (parent[i->index] < i->index)
distToSrc[i->index] = distToSrc[parent[i->index]] + i->distance;
else
distToSrc[i->index] = distToSrc[parent[i->index]] - i->distance;
visited[i->index] = true;
}
}
return distToSrc[dest];
}