Pagini recente » Cod sursa (job #2641156) | Cod sursa (job #1741480) | Cod sursa (job #548719) | Cod sursa (job #1684730) | Cod sursa (job #2739982)
#include <cstdio>
#include <vector>
using namespace std;
const int nmax = 100004;
vector<int>adj[nmax];
int n, m, s;
int dist[nmax];
int coada[nmax];
void bfs()
{
int coadaSize = 0, coadaPrimul = 1;
coada[++coadaSize] = s;
while(coadaPrimul <= coadaSize)
{
int primulNodDinCoada = coada[coadaPrimul];
++coadaPrimul;
for(vector<int>::iterator it = adj[primulNodDinCoada].begin();it!=adj[primulNodDinCoada].end();++it)
{
if(dist[*it] > dist[primulNodDinCoada] + 1)
{
dist[*it] = dist[primulNodDinCoada] + 1;
coada[++coadaSize] = *it;
}
}
}
for(int i = 1; i <=n;i++){
if(dist[i]==1000000000)dist[i]=-1;
printf("%d ",dist[i]);
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d%d%d",&n,&m,&s);
for(int i = 1; i <= n; i++)
{
dist[i] = 1000000000;
}
dist[s] = 0;
for(int i = 1; i <= m;i ++)
{
int x, y;
scanf("%d%d",&x,&y);
adj[x].push_back(y);
}
bfs();
}