Pagini recente » Istoria paginii runda/stefan-georgian1/clasament | Cod sursa (job #2012155) | Cod sursa (job #2893271) | Istoria paginii runda/02local11/clasament | Cod sursa (job #1961444)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
const int NMAX = 100003;
using namespace std;
vector<int> graf[NMAX];
bool viz[NMAX];
int dist[NMAX];
int n,m,s;
queue<int> q;
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d", &n,&m,&s);
int x,y;
for(int i=0;i<m;i++)
{
scanf("%d %d", &x,&y);
graf[x].push_back(y);
}
for(int i=1;i<=n;i++)
{
dist[i]=-1;
}
q.push(s);
dist[s]=0;
int l;
int leg;
while(!q.empty())
{
l=q.front();
viz[l]=1;
q.pop();
leg=graf[l].size();
for(int i=0;i<leg;i++)
{
int loc=graf[l][i];
if(!viz[loc])
{
viz[loc]=1;
dist[loc]=1+dist[l];
q.push(loc);
}
}
}
for(int i=1;i<=n;i++)
{
printf("%d ", dist[i]);
}
return 0;
}