Pagini recente » Cod sursa (job #2577812) | Cod sursa (job #1979807) | Cod sursa (job #487895) | Cod sursa (job #636350) | Cod sursa (job #2798181)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "bfs.in" );
ofstream fout( "bfs.out" );
class Graf {
private:
int N;
vector< vector<int> > adc;
vector<int> dist;
void Bfs(int nod);
public:
Graf(int n);
void AdaugaMuchie(int x, int y);
void Distanta(int nod);
};
void Graf :: Bfs(int nod) {
int i, w, pr;
queue <int> Q;
for(i = 1; i <= N; i++)
dist[i] = -1;
dist[nod] = 0;
Q.push(nod);
while(!Q.empty()) {
pr = Q.front();
Q.pop();
for(i = 0; i < adc[pr].size(); i++) {
w = adc[pr][i];
if(dist[w] == -1) {
dist[w] = dist[pr] + 1;
Q.push(w);
}
}
}
}
Graf :: Graf(int n) {
N = n;
adc.resize( n + 1 );
dist.resize( n + 1 );
}
void Graf :: AdaugaMuchie(int x, int y) {
adc[x].push_back(y);
adc[y].push_back(x);
}
void Graf :: Distanta(int s) {
int i;
Bfs(s);
for(i = 1; i <= N; i++)
fout<<dist[i]<<" ";
}
int main()
{
int n, m ,s, x, y, i;
fin>>n>>m>>s;
Graf G(n);
for(i = 1; i <= m; i++) {
fin >> x >> y;
G.AdaugaMuchie(x, y);
}
G.Distanta(s);
return 0;
}