Pagini recente » Cod sursa (job #106413) | Cod sursa (job #1334631) | Cod sursa (job #351508) | Cod sursa (job #2482772) | Cod sursa (job #2429484)
#include <cstdio>
#include<vector>
using namespace std;
vector <int> G[100001];
vector <int> q;
int cost[100001];
bool viz[100001];
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int n,m,s,orig,dest,last,i;
scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=m;i++)
{
scanf("%d%d",&orig,&dest);
G[orig].push_back(dest);
}
q.push_back(s);
viz[s]=1;
int pas=0;
while(q.size()-1>=pas)
{
int last=q[pas];
for(i=G[last].size()-1;i>=0;i--){
if(viz[G[last][i]]==0){
q.push_back(G[last][i]);
cost[G[last][i]]=cost[last]+1;
viz[G[last][i]]=1;
}
G[last].pop_back();
}
pas++;
}
for(i=1;i<=n;i++){
if(cost[i]!=0 || i==s)
printf("%d ",cost[i]);
else
printf("-1 ");
}
return 0;
}