Pagini recente » Cod sursa (job #558686) | Cod sursa (job #3230276) | Cod sursa (job #1109209) | Cod sursa (job #2770647) | Cod sursa (job #1981902)
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX=100005;
vector <int> G[NMAX];
int viz[NMAX],d[NMAX],t[NMAX];
void bfs(int u)
{
queue <int>q;
viz[u]=1;
q.push(u);
int j,v;
while(!q.empty())
{
u=q.front();
for(j=0; j<(int)G[u].size(); j++)
{
v=G[u][j];
if(!viz[v])
{
viz[v]=1;
t[v]=u;
d[v]=d[u]+1;
q.push(v);
}
}
q.pop();
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int n,m,s,u,v,i;
scanf("%d%d%d",&n,&m,&s);
for(i=1; i<=m; i++)
{
scanf("%d%d",&u,&v);
if(u!=v)
G[u].push_back(v);
//G[v].push_back(u);
}
for(i=1; i<=n; i++)
sort(G[i].begin(),G[i].end());
bfs(s);
for(i=1; i<=n; i++)
if(viz[i])
printf("%d ",d[i]);
else
printf("-1 ");
return 0;
}