Pagini recente » Cod sursa (job #918644) | Cod sursa (job #430411) | Cod sursa (job #635901) | Cod sursa (job #2443188) | Cod sursa (job #2469456)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
const int CMAX =1e5+15;
queue < int > Q;
vector < int > v[CMAX];
int n , m , S;
int arc1 , arc2 , drum[CMAX];
bool vizitat[CMAX];
void citire()
{
fin >> n >> m >> S;
for(int i=0;i<m;i++)
{
fin >> arc1 >> arc2;
if(arc1!=arc2){
v[arc1-1].push_back(arc2-1);
}
}
}
int bfs(int nod_actual,int nod)
{
int nod_precedent = 0;
Q.push(nod_actual);
vizitat[Q.front()] = 1;
if(nod_actual==nod)return 0;
else{
while(!Q.empty())
{
for(int i=0;i<v[Q.front()].size();i++)
{
if(vizitat[v[Q.front()][i]]==0){
int vecin = v[Q.front()][i];
vizitat[v[Q.front()][i]] = 1;
Q.push(v[Q.front()][i]);
drum[vecin] = drum[Q.front()] + 1;
if(vecin==nod)
return drum[vecin];
}
}
Q.pop();
}
}
return -1;
}
int main()
{
citire();
for(int i=0;i<n;i++)
{
memset(drum,0,n);
for(int j=0;j<n;j++)
vizitat[j] = 0;
fout << bfs(S-1,i) << " ";
}
return 0;
}