Pagini recente » Cod sursa (job #1635096) | Cod sursa (job #2070479) | Cod sursa (job #2620243) | Cod sursa (job #375309) | Cod sursa (job #2813547)
#include <bits/stdc++.h>
using namespace std;
#define maxi 100005
ifstream in("bfs.in");
ofstream out("bfs.out");
class Graf
{
int n,m; //n- nr noduri, m- nr muchii
int x,y; //muchie stg-dr
int viz[100005]; //pt dfs
vector<int> *l;
public:
Graf();
void citireDFS();
void dfs(int s);
void nrCompCone();
int citireBFS();
void bfs(int s);
};
Graf::Graf() {
n = m = x = y = 0;
l = new vector<int>[maxi];
//l2 = new vector<int>[maxi];
}
void Graf::citireDFS()
{
in>>n>>m;
int x,y;
for(int i =0; i<m; i++)
{
in>>x>>y;
l[x].push_back(y);
l[y].push_back(x);
}
}
void Graf:: dfs(int s)
{
viz[s]=1;
for(auto el:l[s])
{
if(viz[el]==0)
{
dfs(el);
}
}
}
void Graf::nrCompCone()
{
int c_con=0;
for(int i=1; i<=n; i++)
{
if(viz[i]==0)
{
dfs(i);
c_con++;
}
}
out<<c_con;
}
int Graf :: citireBFS()
{
int s;
in>>n>>m>>s;
int x,y;
for(int i =0; i<m; i++)
{
in>>x>>y;
l[x].push_back(y);
}
return s;
}
void Graf::bfs(int s)
{
//int vizitat[10000];
queue<int> q;
int dist[100005];
for(int i =1; i<=n; i++)
{
dist[i]=-1;
}
int v;
q.push(s);
viz[s] = 1;
dist[s]=0;
while(!q.empty())
{
v=q.front();
for(auto el:l[v])
{
if(dist[el]==-1)
{
q.push(el);
viz[el]=1;
dist[el]=dist[v]+1;
}
}
q.pop();
}
for(int i = 1; i<=n; i++)
{
out << dist[i]<<' ';
}
}
int main()
{
int ss;
Graf g2;
ss=g2.citireBFS();
g2.bfs(ss);
/*
Graf g1;
g1.citireDFS();
g1.nrCompCone();
*/
return 0;
}