Pagini recente » Cod sursa (job #465961) | Cod sursa (job #2151778) | Cod sursa (job #3139378) | Cod sursa (job #1219221) | Cod sursa (job #496334)
Cod sursa(job #496334)
#include<stdio.h>
#include<list>
#include<deque>
using namespace std;
FILE*f=fopen("bfs.in","r");
FILE*g=fopen("bfs.out","w");
int N,M,S,cost[100100],i,x,y,nr,cc;
list<int>W[100100];
deque<int> coada;
char viz[100100];
int main () {
fscanf(f,"%d %d %d",&N,&M,&S);
for(i = 1 ; i <= M ; ++i ){
fscanf(f,"%d %d",&x,&y);
W[x].push_back(y);
}
list<int>::iterator itt;
coada.push_back(S);
viz[S] = 1;
cost[S] = 0;
while ( !coada.empty() ){
nr = *coada.begin();
cc = cost[nr];
for( itt = W[nr].begin() ; itt != W[nr].end() ; ++itt ){
if( viz[*itt] == 0 ){
coada.push_back(*itt);
cost[*itt] = cost[nr] + 1;
}
}
coada.pop_front();
}
for( i = 1 ; i <= N ; ++i ){
if ( cost[i] == 0 )
if ( i == S)
fprintf(g,"0 ");
else
fprintf(g,"-1 ");
else
fprintf(g,"%d ",cost[i]);
}
fclose(f);
fclose(g);
return 0;
}