Pagini recente » Cod sursa (job #1547718) | Cod sursa (job #1825238) | Cod sursa (job #181779) | Cod sursa (job #1025529) | Cod sursa (job #571480)
Cod sursa(job #571480)
#include<stdio.h>
#include<malloc.h>
typedef struct _nod
{
int info;
struct _nod *adr;
} nod;
typedef struct
{
struct _nod *cap;
} list;
list A[100001];
int N;
int M;
int X;
int D[100001];
void add(int a,int b)
{
nod *nou = (nod*)malloc(sizeof(nod));
nou->info = b;
nou->adr = A[a].cap;
A[a].cap = nou;
}
void citire(void)
{
int a;
int b;
FILE *f = fopen("bfs.in","r");
fscanf(f,"%d %d %d ",&N,&M,&X);
for(int i=1;i<=M;i++)
{
fscanf(f,"%d %d",&a,&b);
if(a!=b)
add(a,b);
}
fclose(f);
}
void add2(nod*& Cf,int info)
{
nod *nou = (nod*)malloc(sizeof(nod));
nou->info = info;
nou->adr = NULL;
Cf->adr = nou;
Cf = nou;
}
void parcurgere(void)
{
nod *Ci = (nod*)malloc(sizeof(nod));
Ci->info = X;
Ci->adr = NULL;
nod *Cf = Ci;
D[X] = 0;
while(Ci)
{
nod *q = A[Ci->info].cap;
while(q)
{
if(!D[q->info])
{
D[q->info] = D[Ci->info] + 1;
add2(Cf,q->info);
}
q = q->adr;
}
q = Ci;
Ci = Ci->adr;
free(q);
}
D[X] = 0;
}
void afisare(void)
{
FILE *f = fopen("bfs.out","w");
for(int i=1;i<=N;i++)
if(D[i])
fprintf(f,"%d ",D[i]);
else if(i != X)
fprintf(f,"-1 ");
else
fprintf(f,"0 ");
fclose(f);
}
int main()
{
citire();
parcurgere();
afisare();
return 0;
}