Pagini recente » Cod sursa (job #2357621) | Cod sursa (job #2854971) | Cod sursa (job #186158) | Cod sursa (job #2288726) | Cod sursa (job #2793518)
#include<bits/stdc++.h>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
const int nmax = 100001;
class Graf{
int n, m;
vector<int> vecin[nmax];
void recursieDFS(int nod, bool vizitat[]){
vizitat[nod]=true;
for(int i=0; i<vecin[nod].size(); ++i)
if(vizitat[vecin[nod][i]]==false)
recursieDFS(vecin[nod][i], vizitat);
};
public:
Graf(int n, int m){
this->n=n;
this->m=m;
}
void citireM( int m, bool orient ){
for( int i=0; i<m; ++i ){
int a, b; in >> a >> b;
vecin[a].push_back(b);
if( orient == false ) vecin[b].push_back(a);
}
}
void DFS(){
int nr_comp_conex=0;
bool vizitat[n];
for(int i=1;i<=n;++i)
vizitat[i]=false;
for(int i=1;i<=n;++i){
if(vizitat[i]==false){
recursieDFS(i,vizitat);
nr_comp_conex++;
}
}
cout<<nr_comp_conex;
}
void BFS(int s){
int drum[n+1];
for(int i=1;i<=n;++i)
drum[i]=-1;
drum[s]=0;
queue <int> poz;
poz.push(s);
while(!poz.empty()){
int nod=poz.front();
for(int i=0; i<vecin[nod].size(); ++i){
if( drum[vecin[nod][i]] == -1 ){
poz.push( vecin[nod][i] );
drum[vecin[nod][i]]=drum[nod]+1;
}
}
poz.pop();
}
for(int i=1;i<=n;++i)
out<<drum[i]<<" ";
}
};
int main()
{
int n,m,s;
in>>n>>m>>s;
Graf g(n,m);
g.citireM(m,true);
g.BFS(s);
return 0;
}