Pagini recente » Cod sursa (job #1628185) | Cod sursa (job #541871) | Cod sursa (job #227855) | Cod sursa (job #3220468) | Cod sursa (job #2199550)
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <queue>
using namespace std;
void citire( int &n, vector< pair<int, int> >* &la, int &x, int &y, ifstream &f)
{
int m, it, i, j, cost;
f >> n >> m >> x >> y;
la = new vector< pair<int, int> >[n+1];
for(it = 1; it <= m; it++)
{
f >> i >> j >> cost;
la[i].push_back({j, cost});
la[j].push_back({i, cost});
}
}
void afisList(int n, vector <pair <int, int> >*la)
{
int i;
vector< pair<int,int> > :: iterator it;
for(i = 1; i<= n; i++)
{
cout<<i<<": ";
// for(j = 0; j < la[i].size(); j++)
// cout<<la[i][{j.first, j.second}]<<" ";
for(it = la[i].begin(); it != la[i].end(); ++it)
cout << "(" << (*it).first << " , " << (*it).second << ") ";
cout<<endl;
}
}
void Bf(const int &n, vector< pair<int, int> > *la, const int &nod_start, const int &nod_end, int* &dist)
{
int *viz = new int[n+1](); //initial cu zero
dist = new int[n+1]();
queue<int> c;
viz[nod_start] = 1;
dist[nod_start] = 1;
c.push(nod_start);
while( !c.empty() )
{
int nod = c.front();
c.pop();
for(unsigned i = 0; i < la[nod].size(); i++)
{
int nod_nou = la[nod][i].first;
int cost_nou = la[nod][i].second;
if( viz[nod_nou] == 0)
{
viz[nod_nou] = 1;
if( nod_nou > nod )
dist[nod_nou] = dist[nod] + cost_nou;
else
dist[nod_nou] = dist[nod] - cost_nou;
c.push(nod_nou);
}
}
}
delete viz;
}
int main()
{
ifstream fin ("sate.in");
int n, nod_start, nod_end;
vector< pair<int, int> > *la;
citire(n, la, nod_start, nod_end, fin);
afisList(n, la);
fin.close();
cout<<endl;
int *km;
Bf(n, la, nod_start, nod_end, km);
ofstream fout ("sate.out");
fout << km[nod_end] - km[nod_start];
fout.close();
delete km;
return 0;
}