Pagini recente » Cod sursa (job #1079463) | Cod sursa (job #408233) | Cod sursa (job #3225798) | Cod sursa (job #122809) | Cod sursa (job #807654)
Cod sursa(job #807654)
#include <fstream>
#include <map>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
map<int,vector<int> > graph;
bool visited[100100];
int result[100100];
int n,m,s;
void read(){
in>>n>>m>>s;
int i,x,y;
for(i=1;i<=m;++i){
in>>x>>y;
graph[x].push_back(y); // exista arc de la x la y
}
}
void bf(){
int currentnode;
int currentdistance;
queue <int> coada;
vector <int> neighbours;
vector <int>::iterator it;
coada.push(s);
int i;
for(i=1;i<=n;++i){
visited[i]=false;
result[i]=-1;
}
result[s]=0;
visited[s]=true;
while(!coada.empty()){
currentnode=coada.front();
currentdistance=result[currentnode];
coada.pop();
neighbours=graph[currentnode];
for(it=neighbours.begin();it!=neighbours.end();++it){
if(visited[*it]==true)
continue;
coada.push(*it);
result[*it]=currentdistance+1;
visited[*it]=true;
}
}
for(i=1;i<=n;++i){
out<<result[i]<<" ";
}
}
int main(){
read();
bf();
}