Pagini recente » Cod sursa (job #1013591) | Cod sursa (job #566446) | Cod sursa (job #1657951) | Cod sursa (job #1286413) | Cod sursa (job #2796698)
#include <bits/stdc++.h>
using namespace std;
//ifstream fin("dfs.in");
ifstream fin("bfs.in");
ofstream fout("bfs.out");
//ofstream fout("dfs.out");
class Graf{
private:
int n,m,nod_plecare;
static const int N=100010;
vector<int> v[N];
int ans[N]={0};
queue<pair<int,int>>q;
bitset <N> viz;
public:
Graf();
~Graf();
void add_edge(int,int);
void dfs(int);
void bfs();
void citire_Graf_neorientat();
void citire_Graf_orientat_bfs();
int nr_connected_components();
};
Graf::Graf() {
}
Graf::~Graf() {
}
void Graf::add_edge(int x, int y){
v[x].push_back(y);
v[y].push_back(x);
}
void Graf::dfs(int node){
viz[node] = 1;
for(auto it:v[node])
if(!viz[it])
dfs(it);
}
int Graf::nr_connected_components() {
int ct=0;
for(int i=1;i<=this->n;i++)
if(!viz[i]){
dfs(i);
ct++;
}
return ct;
}
void Graf::citire_Graf_neorientat(){
int nr_noduri,nr_muchii;
fin>>nr_noduri>>nr_muchii;
this->n = nr_noduri;
this->m = nr_muchii;
for(int i=1;i<=m;i++){
int x,y;
fin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
}
void Graf::citire_Graf_orientat_bfs() {
int nr_noduri,nr_muchii,plecare;
fin>>nr_noduri>>nr_muchii>>plecare;
this->n = nr_noduri;
this->m = nr_muchii;
this->nod_plecare = plecare;
q.push(make_pair(this->nod_plecare,0));
for(int i=1;i<=this->m;i++)
{
int x,y;
fin>>x>>y;
v[x].push_back(y);
}
}
void Graf::bfs() {
while(!q.empty()){
pair<int,int> dp = q.front();
int x =dp.first;
int y = dp.second;
ans[x] =y;
for(auto it:v[x])
if(!viz[it]){
viz[it]=1;
q.push(make_pair(it,y+1));
}
q.pop();
}
ans[this->nod_plecare] = 0;
for(int i=1;i<=n;i++){
if(ans[i]==0 && i!= this->nod_plecare)
ans[i]=-1;
fout<<ans[i]<<" ";
}
}
int main(){
/*
Graf G;
G.citire_Graf_neorientat();
fout<<G.nr_connected_components();
*/
Graf G;
G.citire_Graf_orientat_bfs();
G.bfs();
return 0;
}