Pagini recente » Cod sursa (job #2999498) | Cod sursa (job #354886) | Cod sursa (job #2823017) | Cod sursa (job #2770392) | Cod sursa (job #369490)
Cod sursa(job #369490)
#include <cstdio>
#include <vector>
using namespace std;
const int N = 100001;
vector <int> vecin[N];
int coada [N];
int dist [N];
int n,s;
void citire()
{
int m;
int x,y;
scanf("%d%d%d",&n,&m,&s);
for (int i = 1; i <= m; ++i)
{
scanf("%d%d",&x,&y);
vecin[x].push_back(y);
}
}
void initializare_dist()
{
for (int i = 1; i <= n; ++i)
dist[i] = -1;
}
void calculare()
{
coada[1] = s;
dist[s] = 0;
int p = 1, q = 1;
int x,y;
while (q >= p)
{
x = coada[p];
for (int i = 0; i <= vecin[x].size() - 1; ++i)
{
y = vecin[x][i];
if (dist[y] != -1)
continue;
coada[++q] = y;
dist[y] = dist[x] + 1;
}
++p;
}
}
void afisare()
{
for (int i = 1; i <= n; ++i)
printf("%d ",dist[i]);
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
citire();
initializare_dist();
calculare();
afisare();
return 0;
}