Pagini recente » Cod sursa (job #1072927) | Cod sursa (job #1384377) | Cod sursa (job #382008) | Cod sursa (job #851508) | Cod sursa (job #2944481)
#include <fstream>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
vector<int> BFS(vector<vector<int>> lista, int s){
queue<pair<int, int>> coada;
vector<int> vizitate;
vector<int> distante;
distante.resize(lista.size());
vizitate.resize(lista.size());
vizitate[s] = 1;
coada.push({s, 0});
while(!coada.empty()){
int nodCurent = coada.front().first;
int distCurent = coada.front().second;
distante[nodCurent] = distCurent;
for(int &nod : lista[nodCurent])
if(!vizitate[nod]) {
coada.push({nod, distCurent + 1});
vizitate[nod] = 1;
}
coada.pop();
}
for (int i = 1; i < distante.size(); i++)
if(distante[i] == 0 && i != s)
distante[i] = -1;
return distante;
}
int main() {
int n, m, s;
fin>>n>>m>>s;
vector<vector<int>> lista;
lista.resize(n + 1);
int x, y;
for(int i = 0; i < m; i++){
fin>>x>>y;
lista[x].push_back(y);
}
vector<int> distante = BFS(lista, s);
for (auto &lista2 : lista);
for(int i = 1; i <= n; i++)
fout<<distante[i]<<' ';
return 0;
}