Pagini recente » Cod sursa (job #1546192) | Cod sursa (job #1821958) | Cod sursa (job #2822645) | Cod sursa (job #2354474) | Cod sursa (job #304170)
Cod sursa(job #304170)
#include <stdio.h>
#include <vector>
#include <bitset>
#include <queue>
using namespace std;
FILE *f=fopen("bfs.in","r"),*g=fopen("bfs.out","w" );
#define maxn 100001
vector <int> a[maxn];
int n,m,s,t[maxn],cost[maxn];
void citire(){
int x,y,i;
fscanf(f,"%d%d%d",&n,&m,&s);
while(m--){
fscanf(f,"%d%d",&x,&y);
a[x].push_back(y);
}
for(i=1;i<=n;i++)t[i]=a[i].size();
}
bitset<maxn>v;
//queue <int>q;
void bfs(int nod){
int i,x,fiu;
queue <int>q;
while(!q.empty())q.pop();
q.push(nod);
v[nod]=1;
while(!q.empty()){
x=q.front();
q.pop();
for(i=0;i<t[x];i++){
fiu=a[x][i];
if(!v[fiu]){
cost[fiu]=cost[x]+1;
q.push(fiu);
v[fiu]=1;
}
}
}
}
int main(){
citire();
bfs(s);
for(int i=1;i<=n;i++){
if((cost[i]==0)&&(i!=s))fprintf(g,"-1 ");
else fprintf(g,"%d ",cost[i]);
}
fclose(f);
fclose(g);
return 0;
}