Pagini recente » Cod sursa (job #1230118) | Cod sursa (job #1770260) | Cod sursa (job #1942711) | Cod sursa (job #1740491) | Cod sursa (job #538473)
Cod sursa(job #538473)
#include<fstream>
using namespace std;
#define M 1000001
#define N 100001
ifstream in("bfs.in");
ofstream out("bfs.out");
int n,m,c[N],viz[N],li=1,ls,d[N],start;
struct nod{
int x;
nod* next;
};
nod* v[N];
void add(nod* &l, int x){
nod* nn=new nod;
nn->x=x;
nn->next=l;
l=nn;
}
int c_vida(){
return ls<li;
}
void pune(int x){
c[++ls]=x;
}
void scoate(int &x){
x=c[li++];
}
void bf(int start){
nod* nc;
int x,y;
pune(start);
viz[start]=1;
while(!c_vida()){
scoate(x);
nc=v[x];
while(nc){
y=nc->x;
if(!viz[y]){
pune(y);
d[y]=d[x]+1;
viz[y]=1;
}
nc=nc->next;
}
}
}
void build(){
int i,x,y;
in>>n>>m>>start;
for(i=0;i<m;++i){
in>>x>>y;
add(v[x],y);
//add(v[y],x);
}
}
int main(){
int i;
build();
bf(start);
for(i=1;i<=n;++i){
if(d[i]==0&&i!=start)
d[i]=-1;
out<<d[i]<<" ";
}
return 0;
}