Pagini recente » Cod sursa (job #99777) | Cod sursa (job #2254542) | Rating Flower (flower) | Cod sursa (job #2139633) | Cod sursa (job #650922)
Cod sursa(job #650922)
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int info;
struct node *next;
} node;
node *L[100];
typedef struct coada { node *prim; node *ultim;} coada;
coada codita;
void PushC(int x)
{
node *p;
if(!(p=(node*)calloc(1,sizeof(node))))
{printf("eroare memorie");
return ;}
p->info=x;
p->next=NULL;
if(codita.ultim==NULL)
{codita.prim=p;
codita.ultim=p;}
else
{codita.ultim->next=p;
codita.ultim=p;}
}
void PopC()
{
if(codita.prim==NULL)
{printf("eroare-coada vida\n");
return;}
node *p;
p=codita.prim;
codita.prim=codita.prim->next;
free(p);
}
long long cost[100];
int main(){
node *p,*q;
long long i,j,N,M,k,S,x,viz[100];
node *c;
c=(node*)calloc(1,sizeof(node));
/*FILE* fin,*fout;
fin=fopen("bfs.in","r");/
fout=fopen("bfs.out","w");
fscanf(fin,"%lld %lld %lld",&N,&M,&S);
*/
scanf("%lld%lld%lld",&N,&M,&S);
for(k=1;k<=M;k++)
{ //fscanf(fin,"%lld %lld",&i,&j);
scanf("%lld%lld",&i,&j);
p=(node*)calloc(1,sizeof(node)); //se adauga j in lista vecinilor lui i
p->info=j;
p->next=L[i];
L[i]=p;
}
// fclose(fin);
codita.prim=codita.ultim=NULL;
PushC(S);
for(i=1;i<=N;i++) viz[i]=-1;
viz[S]=1;
while(codita.prim!=codita.ultim)
{ c=L[codita.prim->info];
while(c!=codita.ultim)
{
if(viz[c->info]==-1)
{
viz[c->info]=1;
cost[c->info]=cost[codita.prim->info]+1;
PushC(c->info);
}
c=c->next;
}
c=codita.prim->next;
PopC();
codita.prim=c;
}
/*
for(i=1;i<=N;i++)
printf("Nodul %d costul %lld viz %lld",i,cost[i],viz[i]);*/
for(i=1;i<=N;i++)
{
if(viz[i]!=-1)
printf("%lld ",cost[i]); //fprintf(fout,"pentru nodul %lld nr minim de arce este %lld ",i,cost[i]);
else
printf(" -1 "); /* fprintf(fout,"-1");*/
}
system("PAUSE");
return 0;
}