Cod sursa(job #2194135)

Utilizator dobrandreiAndrei Dobra dobrandrei Data 12 aprilie 2018 14:23:40
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <deque>
using namespace std;
FILE *f, *g;

int n, m, s;
int t[2][1000002], start[100002], length[100002];
deque <int> deq;

void ways()
{

  int i, j, k = 0;
  fscanf(f, "%d %d", &i, &j);

  while(!feof(f))
  {
    if(i != j)
    {
      k++;
      t[0][k] = j;
      t[1][k] = start[i];
      start[i] = k;
    }
    fscanf(f, "%d %d", &i, &j);
  }

}

void path()
{
  int node, nodex, poz,  next;

  deq.push_back(s);
  while(!deq.empty())
  {
    nodex = deq.front();
    next=start[nodex];
    start[nodex]=-1;
    while(next!=0)
    {
      poz=next;
      next=t[1][poz];
      if(start[t[0][poz]]!=-1)
      {
        deq.push_back(t[0][poz]);
        length[t[0][poz]]=length[nodex]+1;
      }
    }
    deq.pop_front();
  }
}
int main()
{

  f = fopen("bfs.in", "r");
  g = fopen("bfs.out", "w");

  fscanf(f, "%d %d %d", &n, &m, &s);

  ways();

  path();

  for(int i = 1; i <= n; i++)
    if(length[i] || i == s)
      fprintf(g, "%d ", length[i]);
    else fprintf(g, "-1 ");
  return 0;
}