Pagini recente » Cod sursa (job #2695668) | Cod sursa (job #460366) | Cod sursa (job #1094094) | Cod sursa (job #1314215) | Cod sursa (job #2927351)
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <queue>
using namespace std;
vector<set<int>> graf;
int N, M, S;
vector<int> vc;
void citireGraf(){
ifstream fin("bfs.in");
fin >> N >> M >> S;
graf = vector<set<int>>(N+1);
int nod_1, nod_2;
for(int i = 1; i <= M; i++){
fin >> nod_1 >> nod_2;
graf[nod_1].insert(nod_2);
}
fin.close();
}
void afisareGraf(){
ofstream fout("bfs.out");
for(int i = 1; i <= N; i++){
fout << i << " -> ";
for(auto nod : graf[i])
fout << nod << " ";
fout << '\n';
}
fout.close();
}
void BFS(int nod_start){
ofstream fout("bfs.out");
vector<int> dist = vector<int>(N+1);
queue<int> coada;
if(vc.empty())
vc = vector<int>(N+1);
int nod_curent = nod_start;
vc[nod_start] = 1;
dist[nod_start] = 0;
coada.push(nod_start);
while(!coada.empty()){
nod_curent = coada.front();
//cout << nod_curent << ' ';
coada.pop();
for(const int nod_vecin : graf[nod_curent]){
if(vc[nod_vecin] == 0){
vc[nod_vecin] = 1;
dist[nod_vecin] = dist[nod_curent]+1;
coada.push(nod_vecin);
}
}
}
for(int i = 1; i <= N; i++){
if(!dist[i] and i != nod_start)
dist[i] = -1;
fout << dist[i] << ' ';
}
fout.close();
}
int main() {
citireGraf();
BFS(S);
return 0;
}