Pagini recente » Borderou de evaluare (job #1000147) | Cod sursa (job #286172) | Cod sursa (job #1892916) | Cod sursa (job #327043) | Cod sursa (job #873507)
Cod sursa(job #873507)
#include <fstream>
#include <list>
#include <vector>
#include <queue>
int main(){
std::ifstream fin("bfs.in");
std::ofstream fout("bfs.out");
unsigned N,M,S;
fin>>N>>M>>S;
std::vector< std::vector<unsigned> > liste(M,std::vector<unsigned>(N));
std::vector<unsigned> index(M,0);
for(unsigned i=0;i<M;++i){
unsigned a,b;
fin>>a>>b;
if(b!=S) liste[a-1][index[a-1]++]=b-1;
}
std::vector<int> cost(N,-1);
std::queue<unsigned> sor;
cost[S-1]=0;
sor.push(S-1);
for(unsigned i=0;i<index.size();++i) index[i]=0;
while(!sor.empty()){
S=sor.front(); sor.pop();
for(;index[S]<liste[S].size();index[S]++){
M=liste[S][index[S]];
if(cost[M]==-1){
cost[M]=cost[S]+1;
sor.push(M);
}
}
}
for(unsigned i=0;i<N;++i) fout<<cost[i]<<' ';
fout<<'\n';
}