Pagini recente » Cod sursa (job #137291) | Cod sursa (job #2605108) | Cod sursa (job #354231) | Cod sursa (job #404668) | Cod sursa (job #1072354)
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
int n,m,st;
vector<vector<int> > graf;
vector<int> is_visited, solutie;
queue<int> q;
void BFS()
{
int currentNode,i,len;
q.push(st);
is_visited[st]=1;
solutie[st]=0;
while(!q.empty())
{
currentNode = q.front();q.pop();
len = graf[currentNode].size();
for(i=0;i<len;i++)
{
if(is_visited[graf[currentNode][i]]==0)
{
q.push(graf[currentNode][i]);
is_visited[graf[currentNode][i]]=1;
solutie[graf[currentNode][i]] = solutie[currentNode]+1;
}
}
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int i,u,v;
scanf("%u %u %u",&n,&m,&st);
graf.resize(n+1);is_visited.resize(n+1);solutie.resize(n+1);
for(i=1;i<=m;i++)
{
scanf("%u %u",&u,&v);
graf[u].push_back(v);
}
BFS();
for(i=1;i<=n;i++)if(i!=st && solutie[i]==0)printf("-1 "); else printf("%u ",solutie[i]);
return 0;
}