Pagini recente » Cod sursa (job #2050680) | Cod sursa (job #2735104) | Cod sursa (job #1499717) | Cod sursa (job #2859074) | Cod sursa (job #2075908)
#include<stdio.h>
#include<vector>
#define MAXV 100000
void bfs();
FILE*fin,*fout;
std::vector<int> neighbors[MAXV+1];
int mindist[MAXV+1];
int coada[MAXV+1];
bool vizitat[MAXV+1];
int pr=0,ult=-1;
int V,E;
int main()
{
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
int S;
fscanf(fin,"%d%d%d",&V,&E,&S);
for(int i=1;i<=E;i++)
{
int src,dst;
fscanf(fin,"%d%d",&src,&dst);
neighbors[src].push_back(dst);
}
vizitat[S]=1;
coada[++ult]=S;
bfs();
for(int i=1;i<=V;i++)
{
if(!vizitat[i])
{
fprintf(fout,"-1 ");
}
else
{
fprintf(fout,"%d ",mindist[i]);
}
}
fclose(fin);
fclose(fout);
return 0;
}
void bfs()
{
while(pr<=ult)
{
int nod=coada[pr];
for(int i=0;i<neighbors[nod].size();i++)
{
int u=neighbors[nod][i];
if(!vizitat[u])
{
vizitat[u]=1;
mindist[u]=mindist[nod]+1;
coada[++ult]=u;
}
}
pr++;
}
}