Pagini recente » Cod sursa (job #2836959) | Cod sursa (job #3267378) | Cod sursa (job #2179199) | Cod sursa (job #2379855) | Cod sursa (job #2194128)
#include <stdio.h>
#include <deque>
using namespace std;
FILE *f,*g;
int n,m,s;
int t[2][1000002],start[100002],length[100002];
deque <int> deq;
void ways(){
int i,j,k=0;
fscanf(f,"%d %d",&i,&j);
while(!feof(f)){
if(i!=j){
k++;
t[0][k]=j;
t[1][k]=start[i];
start[i]=k;
}
fscanf(f,"%d %d",&i,&j);
}
}
void path(){
int node,nodex,poz;
deq.push_back(s);
while(!deq.empty())
{
nodex=deq.front();
poz=start[nodex];
start[nodex]=-1;
node=t[0][poz];
if(start[node]!=-1){
deq.push_back(node);
length[node]=length[nodex]+1;
}
while(t[1][poz]){
poz=t[1][poz];
node=t[0][poz];
if(start[node]!=-1){
deq.push_back(node);
length[node]=length[nodex]+1;
}
}
deq.pop_front();
}
}
int main(){
f=fopen("bfs.in","r");
g=fopen("bfs.out","w");
fscanf(f,"%d %d %d",&n,&m,&s);
ways();
path();
for(int i=1;i<=n;i++)
if(length[i] || i==s)
fprintf(g,"%d ",length[i]);
else fprintf(g,"-1 ");
return 0;
}