Pagini recente » Monitorul de evaluare | Cod sursa (job #2500467) | Cod sursa (job #1177214) | Cod sursa (job #2788184) | Cod sursa (job #652880)
Cod sursa(job #652880)
#include <cstdio>
#include <vector>
using namespace std;
const int MAXN = 100005;
const int INF = 1000000000;
vector<int> vecin[MAXN];
int d[MAXN],coada[MAXN],p,q;
int n,s;
void citire()
{
int m,a,b;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf ("%d%d%d",&n,&m,&s);
for (int i = 1;i <= m;++i)
{
scanf ("%d%d",&a,&b);
vecin[a].push_back(b);
}
}
void initializare_bfs(int sursa)
{
for (int i = 1;i <= n;++i)
d[i] = INF;
d[sursa] = 0;
coada[1] = sursa;
p = 1;
q = 1;
}
void bfs(int sursa)
{
int nod;
initializare_bfs(sursa);
while (p <= q)
{
nod = coada[p];
for (unsigned int i = 0;i < vecin[nod].size();++i)
if (d[vecin[nod][i]] == INF)
{
d[vecin[nod][i]] = d[nod] + 1;
coada[++q] = vecin[nod][i];
}
++p;
}
}
void afisare()
{
for (int i = 1;i <= n;++i)
printf ("%d ",(d[i] == INF)?-1:d[i]);
}
int main()
{
citire();
bfs(s);
afisare();
return 0;
}