Pagini recente » Cod sursa (job #1416590) | Cod sursa (job #507118) | Cod sursa (job #108682) | Cod sursa (job #365916) | Cod sursa (job #1981904)
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX = 1005;
vector <int> g[NMAX];
int viz[NMAX], t[NMAX], d[NMAX];
void bfs(int u, int cc)
{
queue <int> q;
viz[u] = cc;
q.push(u);
while(!q.empty())
{
u = q.front();
for(int j = 0; j < (int)g[u].size(); ++j){
int v = g[u][j];
if(!viz[v]){
viz[v] = cc;
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, u, v, xd;
scanf("%d%d%d",&n, &m, &xd);
for(int i = 1; i <= m; ++i)
{
scanf("%d%d", &u, &v);
g[u].push_back(v);
}
for(int i = 1; i <= n; ++i)
sort(g[i].begin(), g[i].end());
int cc = 1;
bfs(xd, cc);
for(int i = 1; i <= n; ++i)
{
if(viz[i])
cout << d[i] << " ";
else cout << -1 << " ";
}
return 0;
}