Pagini recente » Cod sursa (job #1617101) | Cod sursa (job #1058281) | Cod sursa (job #2240091) | Cod sursa (job #2461736) | Cod sursa (job #854501)
Cod sursa(job #854501)
#include <stdio.h>
#include <vector>
using namespace std;
vector <int> G[100001];
int N,M,S,Q[100001],mark[100001];
void bfs()
{
int k1,k2=1;
Q[k2]=S;
for(int i=1;i<=N;i++)
mark[i]=0;
mark[S]=1;
k1=0;
while(k1<k2)
{
k1++;
int l=G[Q[k1]].size();
for(int i=0;i<l;i++)
{
if(mark[G[Q[k1]][i]]==0)
{
mark[G[Q[k1]][i]]=mark[Q[k1]]+1;
Q[++k2]=G[Q[k1]][i];
}
}
}
}
int main()
{
FILE *f,*g;
f=fopen("bfs.in","r");
g=fopen("bfs.out","w");
fscanf(f,"%d%d",&N,&M);
fscanf(f,"%d",&S);
int x,y;
for(int i=0;i<M;i++)
{
fscanf(f,"%d%d",&x,&y);
G[x].push_back(y);
}
bfs();
for(int i=1;i<=N;i++)
{
if ((mark[i]!=0) && (i!=S)) fprintf(g,"%d ",mark[i]-1);
else if (i==S) fprintf(g,"0 ");
else fprintf (g,"-1 ");
}
return 0;
}