Pagini recente » Cod sursa (job #2773256) | Cod sursa (job #618662) | Cod sursa (job #2525411) | Cod sursa (job #971762) | Cod sursa (job #682910)
Cod sursa(job #682910)
#include<cstdio>
#include<vector>
using namespace std;
#define nmax 100010
int n,m,L,start,i,x,y;
vector <int> a[nmax];
int g[nmax],s[nmax],cost[nmax];
void bfs(int nod);
int main()
{
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
scanf("%d%d%d",&n,&m,&start);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
}
for(i=1;i<=n;i++)
g[i]=a[i].size();
bfs(start);
for(i=1;i<=n;i++)
printf("%d ",cost[i]);
printf("\n");
return 0;
}
void bfs(int nod)
{
int i,j;
for(i=1;i<=n;i++)
cost[i]=-1;
//memset(cost,-1,sizeof(cost));
L=1;
cost[nod]=0;
s[L]=nod;
for(i=1;i<=L;i++)
for(j=0;j<g[s[i]];j++)
if(cost[a[s[i]][j]]==-1)
{
s[++L]=a[s[i]][j];
cost[s[L]]=cost[s[i]]+1;
}
}