Pagini recente » Cod sursa (job #1093210) | Cod sursa (job #1110104) | Clasamentul arhivei de probleme | Cod sursa (job #2302101) | Cod sursa (job #796408)
Cod sursa(job #796408)
#include <cstdio>
#include <vector>
#include <queue>
#define Nmax 100005
using namespace std;
queue <int> Q;
vector <int> V[Nmax];
int n,m,s;
int viz[Nmax];///
int c[Nmax];///caii
void Read()
{
freopen("bfs.in","r",stdin);
scanf("%d %d %d",&n,&m,&s);
for(int i = 0 ; i < m; i++)
{
int x,y;
scanf("%d %d",&x,&y);
V[x].push_back(y);///orientat
}
}
void BFS(int s)
{
for(int i = 0; i <= Nmax; i++)
c[i] = -1;///setez val -1
c[s] = 0;///in nod pun 0 caci nu voi avea drum la inceput din el in el
viz[s] = 1;///vizitez
Q.push(s);
while(!Q.empty())
{
int p = Q.front();///iau primul nod din coada
for(int j = 0 ; j < V[p].size();j++)
{
if(!viz[V[p][j]])
{
viz[V[p][j]] = 1;///vizitez nodul
c[V[p][j]] = 1+c[p];///adaug un arc in + fata de ce era
Q.push(V[p][j]);///il bag in coada pentru a gasi urmatoarea valoare
}
}
Q.pop();///elimin nodul
}
}
void afisare()
{
freopen("bfs.out","w",stdout);
for(int i = 1; i<=n;i++)
{
printf("%d ",c[i]);
}
}
int main()
{
Read();
BFS(s);
afisare();
return 0;
}