Pagini recente » Cod sursa (job #2064200) | Cod sursa (job #2152732) | Borderou de evaluare (job #1628305) | Cod sursa (job #657280) | Cod sursa (job #838641)
Cod sursa(job #838641)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int n,m,s;
vector <int> *lista_adiacenta;
int *distanta;
queue < pair<int,int> > noduri_de_parcurs;
inline void citire()
{
ifstream f("bfs.in");
f>>n>>m>>s;
--s;
lista_adiacenta = new vector <int> [n];
distanta = new int[n];
int x,y;
for(int i=0;i!=m;++i)
{
f>>x>>y;
--x;--y;
lista_adiacenta[x].push_back(y);
distanta[i]=-1;
}
f.close();
}
inline void expand(int nod,int adancime_noua)
{
distanta[nod] = adancime_noua;
++adancime_noua;
for(unsigned int i = 0; i != lista_adiacenta[nod].size(); ++i)
if(distanta[lista_adiacenta[nod][i]] == -1)
noduri_de_parcurs.push(make_pair(lista_adiacenta[nod][i],adancime_noua));
}
inline void afisare()
{
ofstream g("bfs.out");
g<<distanta[0];
for(int i=1; i != n; ++i)
g<<" "<<distanta[i];
g.close();
}
int main()
{
citire();
noduri_de_parcurs.push(make_pair(s,0));
pair <int,int> nod_nou;
while(!noduri_de_parcurs.empty())
{
nod_nou = noduri_de_parcurs.front();
noduri_de_parcurs.pop();
expand(nod_nou.first,nod_nou.second);
}
afisare();
return 0;
}