Pagini recente » Cod sursa (job #234773) | Cod sursa (job #1149656) | Cod sursa (job #1715896) | Cod sursa (job #1657549) | Cod sursa (job #735210)
Cod sursa(job #735210)
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <vector>
using namespace std;
struct edge
{
vector<long> neighbour;
};
edge nodes[100001];
long *cost;
long n,m,st,a,b;
void read_input()
{
scanf("%ld %ld %ld", &n,&m,&st);
for(int i=0;i<m;i++)
{
scanf("%ld %ld", &a,&b);
nodes[a].neighbour.push_back(b);
}
/* for(int i=1;i<=n;i++)
{
for(int j=0;j<nodes[i].neighbour.size();j++) printf("%ld ", nodes[i].neighbour[j]);
/printf("\n");
}*/
}
void BFS(long st)
{
//printf("bfs\n");
cost=(long *)calloc((n+1),sizeof(long));
for(int i=1;i<=n;i++) cost[i]=-1;
cost[st]=0;
queue <long> q;
q.push(st);
while(!q.empty())
{
long old=q.front();
q.pop();
// printf("old=%ld\n", old);
for(int i=0;i<nodes[old].neighbour.size();i++)
{
if(cost[nodes[old].neighbour[i]]==-1)
{
q.push(nodes[old].neighbour[i]);
cost[nodes[old].neighbour[i]]=cost[old]+1;
}
}
}
for(int i=1;i<=n;i++) printf("%ld ", cost[i]);
// printf("bfs\n");
}
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
read_input();
BFS(st);
// int i;
//scanf("%i", &i);
return 0;
}