Pagini recente » Cod sursa (job #1765406) | Cod sursa (job #102754) | Cod sursa (job #2046676) | Cod sursa (job #1092078) | Cod sursa (job #1707487)
#include <stdio.h>
#include <vector>
#include <queue>
using std::vector;
using std::queue;
int cost[100001];
vector <int> g[100001];
vector <int> :: iterator it;
queue <int> Q;
void bellford(int S)
{
int nod;
cost[S] = 1;
Q.push(S);
while(!Q.empty())
{
nod = Q.front();
Q.pop();
for(it = g[nod].begin(); it != g[nod].end(); ++it)
{
if(cost[*it] > cost[nod] + 1 || cost[*it] == 0)
{
cost[*it] = cost[nod] + 1;
Q.push(*it);
}
}
}
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int con = 0;
int n,m,i,n1,n2,S;
scanf("%d %d %d",&n,&m,&S);
for(i = 1; i <= m; ++i)
{
scanf("%d %d",&n1,&n2);
g[n1].push_back(n2);
}
bellford(S);
for(i = 1; i <= n; ++i)
if(i == S || cost[i] != 0)
printf("%d ",cost[i] - 1);
else
printf("-1 ");
printf("\n\n");
return 0;
}