Pagini recente » Cod sursa (job #1862257) | Cod sursa (job #1087203) | Cod sursa (job #2489740) | Cod sursa (job #1539457) | Cod sursa (job #2784445)
#include <bits/stdc++.h>
using namespace std;
class Graf
{
int n , m;
vector <int> drum[100001];
public:
Graf(int n, int m, pair <int,int> muhie[]);
int bfs(int nod, int dest);
};
Graf :: Graf(int n, int m, pair <int,int> muchie[])
{
this-> n = n;
this-> m = m;
for(int i=1; i<=m; ++i)
{
drum[ muchie[i].first ].push_back( muchie[i].second );
}
//cout<<"da";
}
int Graf :: bfs(int nod, int dest)
{
if(nod == dest)
return 0;
int dist[n];
bool viz[n];
deque <int> coada;
for(int i=1; i<=n; ++i)
{
dist[i] = -1;
viz[i] = false;
}
coada. push_back(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]] = dist[p] + 1;
viz[drum[p][i]] == true;
coada. push_back(drum[p][i]);
if(drum[p][i] == dest)
return dist[drum[p][i]];
}
}
coada.pop_front();
}
return -1;
}
ifstream fin ("bfs.in");
ofstream fout ("bfs.out");
pair <int,int> muchie[1000001];
int main()
{
int n,m,nod;
//pair <int,int> muchie[m];
fin>>n>>m>>nod;
for(int i=1;i<=m; ++i)
{
fin>> muchie[i].first>>muchie[i].second;
}
Graf g(n,m,muchie);
//cout<<g.bfs(2,2);
for(int i = 1; i<=n; ++i)
{
int rez = g.bfs(nod,i);
fout<<rez<<" ";
}
return 0;
}