Pagini recente » Cod sursa (job #636015) | Cod sursa (job #2964008) | Cod sursa (job #635974) | Cod sursa (job #288734) | Cod sursa (job #1284195)
#include <iostream>
#include <fstream>
#include <vector>
#include <stdio.h>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int c[100008],v[100009],r[100009],p,u,s,n,m; // c-coada folosit v-vectorul de verificare r-sirul nr de arce parcurse
vector<int> sir[100009];
vector<int>::iterator it;
void bf()
{
p=u=1; //initializarea cozii
c[p]=s; //adugam nodul principal in caoda
while(p<=u) //cat timp coada nu e vida
{
for(it=sir[c[p]].begin();it!=sir[c[p]].end();it++)
if(v[*it]==0) //daca nodul nu e verificat
{
u++;
c[u]=*it; //adaugam nodul in coada
v[*it]=1; //marcam nodul ca fiind verificat
r[*it]=r[c[p]]+1; //crestem distanta parcursa
}
p++; //ne mutam la urmatorul nod din coada
}
}
int main()
{
int i,x,y;
f>>n>>m>>s; //citirea numarului de noduri,numarului de arce si a nodului principal
v[s]=1; //marcam nodul prinsipal ca fiind vizitat
for(i=1;i<=m;i++)
{
f>>x>>y;
sir[x].push_back(y);
}
bf();
for(i=1;i<=n;i++) //parcurgerea nodurilor
{
if(i!=s && r[i]==0)r[i]=-1; //daca nu ne aflam la nodul principal si nu se poate ajunge la acest nod ,marcam numarul de arce necesare pentru a ajunge la nodul principal cu -1
g<<r[i]<<" "; //afisare nr de arce care trebuie parcurse pentru a ajunge de al nodul principal la nodul i
}
}