Pagini recente » Cod sursa (job #3193873) | Cod sursa (job #1064659) | Cod sursa (job #1341406) | Cod sursa (job #3149075) | Cod sursa (job #2796391)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#define MAX 100001
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
class Graf{
public:
// date membre
vector <int> A[MAX]; //matrice de adiacenta
int mN, mM; // noduri si muchii
// constructor
Graf(int N, int M){
mN = N;
mM = M;
}
void CitireG(){
int x, y;
for(int i = 1; i <= mM; i++){
fin >> x >> y;
A[x].push_back(y);
}
}
void BFS(int start);
};
void Graf :: BFS(int start){
int x;
bool viz[MAX] = {0};
queue <int> Q;
// int pr, ul;
// pr = 1;
// ul = 0;
int lg[MAX] = {0}; // lungimea drumului
// vizitam nodul curent
viz[start] = 1;
// il punem in coada
Q.push(start);
// fout<<1;
while ( !Q.empty() ){
x = Q.front();
Q.pop();
// preluam primul element din coada apoi il eliminam din coada
for(int i = 0; i < A[x].size(); i++){
// parcurgem toti vecinii lui x
if(viz[A[x][i]] == 0){ // daca nu am mai vizitat vecinul asta{
Q.push(A[x][i]);
// il vizitam
viz[A[x][i]] = 1;
// creste lungimea drumului
lg[A[x][i]] = lg[x] + 1;
}
}
}
for(int i = 1; i <= mN; i++)
if(viz[i] != 0)
fout << lg[i] << " ";
else
fout << -1 << " ";
}
void citire(){
int N, M, S;
int x,y;
fin >> N >> M >> S;
// fout << 1;
Graf G(N,M);
G.CitireG();
G.BFS(S);
}
int main(){
citire();
return 0;
}