Pagini recente » Cod sursa (job #1550092) | Cod sursa (job #2043966) | Cod sursa (job #2271509) | Cod sursa (job #3143940) | Cod sursa (job #3196476)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#include <climits> // INT_MAX
std::vector<std::vector<int> > listaAdiacenta;
std::vector<bool> vizitat;
std::vector<int> cost; // vector pentru costuri
void BFS(int s){ // nod sursa
std::queue<int> q;
q.push(s); // inseram nodul sursa in coada vida
vizitat[s] = true; // marcam nodul sursa ca vizitat
cost[s] = 0; // costul de la sursa la ea insasi este 0
while(!q.empty()){
int nodSursa = q.front();
q.pop();
for(int &nodDest : listaAdiacenta[nodSursa]){
if(!vizitat[nodDest]){
vizitat[nodDest] = true; // marcam nodul muchiei ca vizitat
cost[nodDest] = cost[nodSursa] + 1; // costul de la nodul v la nodul u este costul de la nodul v + 1
q.push(nodDest);
}
}
}
}
int main(){
std::ifstream fin("/Users/alexandrazamfirescu/CLionProjects/laboratoareAF/bfs.in");
std::ofstream fout("bfs.out");
int N, M, S;
fin >> N >> M >> S;
S--; // decrementam S pentru a incepe indexarea de la 0
vizitat.resize(N, false);
cost.resize(N, INT_MAX); // initializam toate costurile cu 0
listaAdiacenta.resize(N);
for(int i = 0; i < M; i++){
int x, y;
fin >> x >> y;
x--;
y--;
listaAdiacenta[x].push_back(y);
listaAdiacenta[y].push_back(x);
}
fin.close();
BFS(S);
for(int i = 0; i < N; i++){
if(cost[i] == INT_MAX){
fout << "-1" << " ";
}
else{
fout << cost[i] << " ";
}
}
fout << "\n";
fout.close();
return 0;
}