Cod sursa(job #1282837)

Utilizator andrei_r_97Radoi Andrei andrei_r_97 Data 4 decembrie 2014 19:49:03
Problema BFS - Parcurgere in latime Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>

#define N_MAX 100000

typedef struct lista {
  int nod;
  struct lista *urm;
} lista;

lista *g[N_MAX+1];

int noduri, muchii, varf;
int cost[N_MAX + 1], vizitat[N_MAX + 1], s[N_MAX+1];

void adauga(int i, int j) {
  lista *p = malloc( sizeof(lista));
  p -> nod = j;
  p ->urm = g[i];
  g[i] = p;
}

void BFS(int nod) {
  int i;
  for ( i = 1; i <= noduri; i++)
    cost[i] = -1;

  cost[nod] = 0;
  int L = 1;
  s[L] = nod;

  lista *p;

  for ( i = 1; i <= L; i++ )
    for ( p = g[ s[i] ]; p != NULL; p = p -> urm )
      if  ( cost[p -> nod] == -1 ) {
          s[++L] = p -> nod;
          cost[s[L]] = cost[s[i]] + 1;
      }

}

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

  int i, a, b;
  fscanf(in, "%d %d %d", &noduri, &muchii, &varf);

  for ( i = 1; i <= muchii; i++ ) {
    fscanf(in,"%d %d", &a, &b);
    adauga(a,b);
  }
  fclose(in);

  BFS(varf);

  for ( i = 1; i <= noduri; i++)
    fprintf(out,"%d ", cost[i]);
  fclose(out);

  return 0;
}