Pagini recente » Cod sursa (job #1229427) | Cod sursa (job #99948) | Cod sursa (job #1177429) | Cod sursa (job #1242653) | Cod sursa (job #1821669)
#include<stdio.h>
#define MAXN 100001
struct nod
{
int val;
nod*next;
};
inline void InitListe(int N);
inline void Adauga(int x,int lista);
inline void bfs(int S);
FILE*fin,*fout;
nod* Lista[MAXN];
int cost[MAXN];
bool seen[MAXN];
int coada[MAXN];
int pr=0,ult=-1;
int main()
{
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
int N,M,S;
fscanf(fin,"%d%d%d",&N,&M,&S);
InitListe(N);
for(int i=1;i<=M;i++)
{
int x,y;
fscanf(fin,"%d%d",&x,&y);
Adauga(y,x);
}
bfs(S);
for(int i=1;i<=N;i++)
{
if(!seen[i])
{
fprintf(fout,"-1 ");
}
else
{
fprintf(fout,"%d ",cost[i]);
}
}
fclose(fin);
fclose(fout);
return 0;
}
inline void Adauga(int x,int lista)
{
nod*newborn=new nod;
newborn->val=x;
newborn->next=Lista[lista]->next;
Lista[lista]->next=newborn;
}
inline void bfs(int S)
{
coada[++ult]=S;
seen[S]=1;
while(pr<=ult)
{
nod* ptr=Lista[coada[pr]];
while(ptr->next!=NULL)
{
if(!seen[ptr->next->val])
{
coada[++ult]=ptr->next->val;
seen[ptr->next->val]=1;
cost[ptr->next->val]=cost[coada[pr]]+1;
}
ptr=ptr->next;
}
pr++;
}
}
inline void InitListe(int N)
{
for(int i=1;i<=N;i++)
{
Lista[i]=new nod;
Lista[i]->next=NULL;
}
}