Pagini recente » Cod sursa (job #51182) | Cod sursa (job #2669995) | Cod sursa (job #3144422) | Cod sursa (job #2970475) | Cod sursa (job #2819756)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define MAX 100001
using namespace std;
ifstream fin ("bfs.in");
ofstream fout("bfs.out");
vector <int> compBiconexe[MAX];
class Graf{
public:
//date membre
vector <int> A[MAX]; //liste de adiacenta
int mM, mN;
//constructor
Graf(int N, int M){
mN = N;
mM = M;
}
void CitireGOrientat(){
}
void CitireGNeOrientat(){
int x, y;
for(int i = 1; i <= mM; i++){
// citim muchiile
fin >> x >> y;
A[x].push_back(y); //adaugam ambele noduri in lista celuilalt de adiacenta
A[y].push_back(x); //deoarece graful e neorientat
}
}
void BFS(int start);
// void DFS(int start);
// void ComponenteConexe();
//
//
// void DFS_Biconex(int start, int father);
// void AfisareBiconex();
};
void Graf :: BFS(int start){
int x, y;
for(int i = 1; i <= mM; i++){
fin >> x >> y;
A[x].push_back(y);
}
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 << " ";
}
int main(){
int N, M, S;
fin >> N >> M >> S;
// fout << 1;
Graf G(N,M);
G.BFS(S);
return 0;
}