Pagini recente » Cod sursa (job #1651707) | Cod sursa (job #367824) | Cod sursa (job #563216) | Cod sursa (job #2674419) | Cod sursa (job #680286)
Cod sursa(job #680286)
#include<stdio.h>
#include<vector>
#include<queue>
#define MAX 100001
using namespace std;
int N,M,S;
vector<int>vecini[MAX];
queue<int>coada;
int cost[MAX];
bool vizitat[MAX];
void deschidere()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
}
void citire()
{
int x,y;
scanf("%d%d%d",&N,&M,&S);
while(M--)
{
scanf("%d%d",&x,&y);
vecini[x].push_back(y);
}
}
void bfs()
{
coada.push(S);
vizitat[S]=1;
while(coada.size())
{
int nod_curent=coada.front();
int lungime=vecini[nod_curent].size();
for(int i=0;i<lungime;i++)
{
int nod_vecin=vecini[nod_curent][i];
if(!vizitat[nod_vecin])
{
coada.push(nod_vecin);
cost[nod_vecin]=1+cost[nod_curent];
vizitat[nod_vecin]=1;
}
}
coada.pop();
}
}
void afisare()
{
int aux=0;
while(++aux<=N)
if(!vizitat[aux])
printf("-1 ");
else
printf("%d ",cost[aux]);
}
int main()
{
deschidere();
citire();
bfs();
afisare();
return 0;
}