Cod sursa(job #525982)

Utilizator icepowdahTudor Didilescu icepowdah Data 26 ianuarie 2011 22:05:38
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;

#define NMAX 100000

struct vertex {
  int id;
  bool visited;
  int dist;
  vector<int> neighbors;
};

void readInput();

int N, M, S;
vertex adj_list[NMAX+1];

int main(void)
{
  queue<int> dfs_queue;

  freopen("bfs.in","r",stdin);
  freopen("bfs.out","w",stdout);
  readInput();

  adj_list[S].dist = 0;
  adj_list[S].visited = true;
  dfs_queue.push(S);
  while (!dfs_queue.empty())
  {
    int u = dfs_queue.front();
    dfs_queue.pop();
    
    for (int i=0;i<adj_list[u].neighbors.size();i++)
    {
      int id = adj_list[u].neighbors[i];
      if (!adj_list[id].visited)
      {
        adj_list[id].dist = adj_list[u].dist+1;
        adj_list[id].visited = true;
        dfs_queue.push(id);
      }
    }
  }

  for (int i=1;i<=N;i++)
  {
    printf("%d ",adj_list[i].dist);
  }
  printf("\n");

  return 0;
}

void readInput()
{
  int i, from, to;

  scanf("%d %d %d",&N,&M,&S);
    
  for (i=1;i<=N;i++)
  {
    adj_list[i].id = i;
    adj_list[i].visited = false; 
    adj_list[i].dist = -1;
  }

  for (i=0;i<M;i++)
  {
    scanf("%d %d",&from,&to);
    adj_list[from].neighbors.push_back(to);
  }
}