Pagini recente » Cod sursa (job #2280357) | Clasament antrenament-de-primavarav2 | Cod sursa (job #1442984) | Cod sursa (job #2080749) | Cod sursa (job #369500)
Cod sursa(job #369500)
#include <cstdio>
#include <vector>
using namespace std;
const int N = 1<<17;
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(); ++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]);
}
/*
void afisare_vecini()
{
for (int i = 1; i <= n; ++i)
{
printf ("%d ->",i);
for (int j = 0; j < vecin[i].size(); ++j)
printf(" %d",vecin[i][j]);
printf("\n");
}
printf("\n");
}
*/
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
citire();
//afisare_vecini();
initializare_dist();
calculare();
afisare();
return 0;
}