Pagini recente » Poke | Cod sursa (job #3250460) | Cod sursa (job #717233) | Cod sursa (job #366946) | Cod sursa (job #3339593)
#include <iostream>
#include <fstream>
#include <queue>
#include <list>
#include <bitset>
#define NMAX 100005
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int n,m,s,dist[NMAX]={0};
queue <int> Q;
list <int> vecini[NMAX];
bitset<NMAX> M;
void bfs(int x)
{
Q.push(x);
M[x]=1;
while(!Q.empty())
{
for(auto node : vecini[Q.front()])
{
if(M[node]==0)
{
Q.push(node);
M[node]=1;
dist[node]=dist[Q.front()]+1;
}
}
Q.pop();
}
}
int main()
{
fin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int x,y;
fin>>x>>y;
vecini[x].push_back(y);
}
bfs(s);
for(int i=1;i<=n;i++)
{
if(dist[i]==0 && i!=s)
fout<<"-1 ";
else
fout<<dist[i]<<" ";
}
return 0;
}