Pagini recente » Cod sursa (job #2059410) | Cod sursa (job #2981037) | Cod sursa (job #2413013) | Cod sursa (job #3261785) | Cod sursa (job #1654196)
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
const int NMAX = 100005;
vector<int> G[NMAX];
queue<int> q;
bool viz[NMAX];
int d[NMAX];
void bfs(int u)
{
q.push(u);
viz[u] = 1;
while(!q.empty())
{
u = q.front();
q.pop();
for(size_t i=0;i<G[u].size();++i)
if(!viz[G[u][i]])
{
viz[G[u][i]] = 1;
q.push(G[u][i]);
d[G[u][i]] = d[u] + 1;
}
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int n,m,Start,pos1,pos2;
scanf("%d%d%d",&n,&m,&Start);
for(int i=1;i<=m;++i)
{
scand("%d%d",&pos1,&pos2);
G[pos1].push_back(pos2);
}
bfs(Start);
for(int i=1;i<=n;++i)
{
if(i==Start)
{
printf("0 ");
continue;
}
if(d[i] == 0)
{
printf("-1 ");
continue;
}
printf("%d ",d[i]);
}
printf("\n");
return 0;
}