Cod sursa(job #230313)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 13 decembrie 2008 17:28:40
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <stdio.h>

struct nod
{
int x;
nod *urm;
};
struct zoro
{
int x,c;
zoro *urma;
};
typedef nod *lista;
typedef zoro *coada;
coada que,ultim;
lista A[100001];
int B[100001];

void add(int x,int c)
{
if (que==NULL)
        {
        coada urm;
        urm = new zoro;
        urm->x = x;
        urm->c = c;
        urm->urma =NULL;
        que = urm;
        ultim = que;
        }
else {
        coada urm;
        urm = new zoro;
        urm->x = x;
        urm->c = c;
        urm->urma =NULL;
        ultim->urma = urm;
        ultim = urm;
     }
}

void bfs(int p,int c)
{
B[p] = c;
while (A[p]!=NULL)
{
if (B[A[p]->x]==-1 || B[A[p]->x]>c+1) add(A[p]->x,c+1);
A[p] = A[p]->urm;
}
if (que!=NULL)
        {
         int q = que->x;
         int w = que->c;
         que = que->urma;
         bfs(q,w);
        }
}

int main()
{
FILE *in=fopen("bfs.in","r");
FILE *out=fopen("bfs.out","w");

int n,m,k;

fscanf(in,"%d%d%d",&n,&m,&k);

lista urm;int x,y;

for (;m;m--)
{
fscanf(in,"%d%d",&x,&y);
urm = new nod;
urm->x = y;
urm->urm = A[x];
A[x] = urm;
}

int i;
for (i=0;i<=n;i++) B[i] = -1;


bfs(k,0);
for (i=1;i<=n;i++) fprintf(out,"%d ",B[i]);


}