Pagini recente » Cod sursa (job #3157376) | Cod sursa (job #1616766) | Cod sursa (job #2497386) | Cod sursa (job #1948988) | Cod sursa (job #2785256)
#include <bits/stdc++.h>
using namespace std;
class Graf
{
int n , m;
vector <vector <int>> drum;
public:
Graf(int n, int m, vector <vector <int>> drum);
vector<int> bfs(int nod);
void dfs(int nod,bool viz[]);
int compCon();
//~Graf();
};
Graf :: Graf(int n, int m, vector <vector <int>> drum)
{
this-> n = n;
this-> m = m;
this -> drum = drum ;
}
/*
Graf :: ~Graf()
{
} */
/*ifstream fin ("bfs.in");
ofstream fout ("bfs.out"); */
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
vector <int> Graf :: bfs(int nod)
{
vector <int> dist;
//bool viz[n+1];
queue <int> coada;
for(int i=0; i<=n; ++i)
{
dist.push_back(-1);
//viz[i] = false;
}
coada.push (nod);
//viz[nod] = true;
dist[nod] = 0;
while(!coada.empty())
{
int p = coada. front();
for(int i=0; i<drum[p].size(); ++i)
{
if(/*viz[drum[p][i]] == false */ dist[drum[p][i]] == -1)
{
dist[drum[p][i]] = dist[p] + 1;
//viz[drum[p][i]] == true;
coada. push(drum[p][i]);
}
}
coada.pop();
}
return dist;
}
int Graf :: compCon()
{
int nrComp = 0;
bool* viz = new bool[n+1];
for(int i = 0; i<=n; ++i)
{
viz[i] = false;
}
for(int i = 1; i<= n; ++i)
{
if(viz[i] == false)
{
dfs(i, viz);
nrComp++;
//cout<<endl;
}
/* for(int j = 1; j<= n; ++j)
cout<<viz[j]<<" ";
cout<<endl; */
}
return nrComp;
}
void Graf :: dfs(int nod,bool viz[])
{
viz[nod] = true;
//cout<< nod <<" ";
for(int i = 0; i <drum[nod].size(); ++i)
{
if(viz[drum[nod][i]] == false)
{
viz[drum[nod][i]] = true;
dfs(drum[nod][i],viz);
}
}
}
void p2()
{
int n,m,x,y;
fin>>n>>m;
vector <vector <int>> drum (n+1);
for(int i =0; i<m; ++i)
{
fin>>x>>y;
drum[x].push_back(y);
drum[y].push_back(x);
}
Graf g1 = Graf(n,m,drum);
int r = g1.compCon();
fout<<r;
}
void p1()
{
int n,m,nod, x, y;
fin>>n>>m>>nod;
vector <vector <int>> drum (n+1);
for(int i=0;i<m; ++i)
{
fin>>x>>y;
drum[x].push_back(y);
}
Graf g(n,m,drum);
vector<int> r = g.bfs(nod);
for(int i = 1;i<=n; ++i)
fout<<r[i]<<" ";
}
int main()
{
p1();
//p2();
return 0;
}