Pagini recente » Cod sursa (job #1467781) | Cod sursa (job #1617650) | Cod sursa (job #1875854) | Borderou de evaluare (job #2323961) | Cod sursa (job #1905728)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
queue<int> q;
vector<int> adj[100010];
int dist[100010];
int n,m,s;
void bfs(int nod)
{
for(vector<int>::iterator it=adj[nod].begin();it!=adj[nod].end();it++)
{
if(dist[*it]==0&&*it!=nod)
{
dist[*it]=dist[nod]+1;
q.push(*it);
//printf("%d %d %d\n",q.front(),*it,dist[*it]);
}
}
if(!q.empty())
{
int next=q.front();
q.pop();
bfs(next);
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d",&n,&m,&s);
int x,y;
for(int i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
adj[x].push_back(y);
}
bfs(s);
for(int i=1;i<=n;i++)
{
if(dist[i]==0)
{
dist[i]=-1;
}
if(i==s)
{
dist[i]=0;
}
printf("%d ",dist[i]);
}
}