Pagini recente » Cod sursa (job #1863672) | Cod sursa (job #2708884) | Cod sursa (job #1250209) | Cod sursa (job #560993) | Cod sursa (job #1705361)
#include <fstream>
#include <list>
#include <vector>
#include <queue>
using namespace std;
#define NOT_VIS -1
struct Node{
int dist;
list<int> neigh;
Node(){
dist = NOT_VIS;
}
};
vector<Node> nodes;
void BFS(int cnode){
queue<int> qu;
//Descopera descendentii neparcursi
list<int>::iterator it;
for(it = nodes[cnode].neigh.begin();
it != nodes[cnode].neigh.end();
it ++){
if(nodes[*it].dist == NOT_VIS){
qu.push(*it);
nodes[*it].dist = nodes[cnode].dist + 1;
}
}
//Parcurge descendentii
while(!qu.empty()){
BFS(qu.front());
qu.pop();
}
}
int main(){
int N, M, S;
int i,u,v;
ifstream in("bfs.in");
ofstream out("bfs.out");
in >> N >> M >> S;
nodes.resize(N+1);
for(i = 0; i < M; i++){
in >> u >> v;
nodes[u].neigh.push_back(v);
}
nodes[S].dist = 0;
BFS(S);
for(i = 1; i <= N; i++)
out<<nodes[i].dist<<" ";
in.close();
out.close();
return 0;
}