Pagini recente » Cod sursa (job #89717) | Cod sursa (job #8696) | Cod sursa (job #1375285) | Cod sursa (job #1522719) | Cod sursa (job #2429482)
#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;
while(q.empty()==0)
{
int last=q[0];
for(i=0;i<q.size()-1;i++)
q[i]=q[i+1];
q.pop_back();
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();
}
}
for(i=1;i<=n;i++){
if(cost[i]!=0 || i==s)
printf("%d ",cost[i]);
else
printf("-1 ");
}
return 0;
}