Pagini recente » Cod sursa (job #3279456) | Cod sursa (job #1215701) | Cod sursa (job #2874854) | Cod sursa (job #2082982) | Cod sursa (job #1061966)
#include <cstdio>
#include <vector>
#include <queue>
#define Nmax 100001
using namespace std;
int n,s;
int dmin[Nmax];
vector<pair<int,int> >G[Nmax];
vector<pair<int,int> >::iterator it;
queue <int> C;
void citire(int &n,int &s)
{
int j,m;
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d %d %d",&n,&m,&s);
for(j=1;j<=m;++j)
{
int x,y;
scanf("%d %d",&x,&y);
G[x].push_back(make_pair(y,1));
}
}
void dfs()
{
bool viz[Nmax];
int i,x;
for(i=1;i<=n;++i) {dmin[i]=0;viz[i]=0;}
viz[s]=1;
C.push(s);
while(!C.empty())
{
x=C.front();C.pop();
for(it=G[x].begin();it!=G[x].end();++it)
if (!viz[it->first])
{
dmin[it->first]=dmin[x]+1;
viz[it->first]=1;
C.push(it->first);
}
}
}
void afisare()
{
int i;
for(i=1;i<=n;++i)
if (i==s) printf("%d ",0);
else if (!dmin[i]) printf("%d ",-1);
else printf("%d ",dmin[i]);
}
int main()
{
citire(n,s);
dfs();
afisare();
return 0;
}