Pagini recente » Cod sursa (job #2981573) | Cod sursa (job #2347157) | Cod sursa (job #3277304) | Cod sursa (job #32603) | Cod sursa (job #2586602)
#include <fstream>
#include <vector>
#define NMAX 30000
#define MMAX 100024
using namespace std;
int coada[MMAX];
vector<pair<int, int>> graf[NMAX];
int distante[NMAX];
bool vizitat[NMAX];
void citesteGraf(string fisierIntrare, int & n, int & satX, int & satY)
{
ifstream fin(fisierIntrare);
int m, aux, d;
fin >> n >> m >> satX >> satY;
satX--;
satY--;
int x, y;
for (int i = 0; i < m; i++)
{
fin >> x >> y >> d;
x--;
y--;
if (x > y)
{
aux = x;
x = y;
y = aux;
}
graf[x].emplace_back(y, d);
graf[y].emplace_back(x, -d);
}
fin.close();
}
void bfs(int n, int sursa)
{
int i, st = 0, lungime = 1;
coada[0] = sursa;
vizitat[sursa] = true;
int s;
while (st < lungime)
{
s = coada[st];
st++;
for (i = 0; i < graf[s].size(); i++)
if (!vizitat[graf[s][i].first])
{
distante[graf[s][i].first] = distante[s] + graf[s][i].second;
vizitat[graf[s][i].first] = true;
coada[lungime] = graf[s][i].first;
lungime++;
}
}
}
void scrieDistanta(string fisierIesire, int satY)
{
ofstream fout(fisierIesire);
fout << distante[satY];
fout.close();
}
int main()
{
int n, satX, satY;
citesteGraf("sate.in", n, satX, satY);
bfs(n, satX);
scrieDistanta("sate.out", satY);
return 0;
}