Pagini recente » Cod sursa (job #1134513) | Cod sursa (job #2220265) | Cod sursa (job #1433769) | Cod sursa (job #1708892) | Cod sursa (job #2470050)
#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] = {0};
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)
{
Q.push(nod);
vizitat[nod] = 1;
while(!Q.empty())
{
for(int i=0;i<v[Q.front()].size();i++)
{
if(vizitat[v[Q.front()][i]]==0)
{
vizitat[v[Q.front()][i]] = 1;
drum[v[Q.front()][i]] = drum[Q.front()] + 1;
Q.push(v[Q.front()][i]);
}
}
Q.pop();
}
}
int main()
{
citire();
bfs(S-1);
for(int i=0;i<n;i++)
{
if(S-1==i)fout << 0 << " ";
else if(drum[i]==0)fout << -1 << " ";
else fout << drum[i] << " ";
}
return 0;
}