Cod sursa(job #678430)

Utilizator pikuAnca Miihai piku Data 11 februarie 2012 17:46:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<list>

using namespace std;

int n, m, s;
list<int> graph[100010];
int cost[100010];

int main (int argc, char const *argv[])
{
  freopen("bfs.in", "r", stdin);
  freopen("bfs.out", "w", stdout);
  
  scanf("%d %d %d", &n, &m, &s);
  
  for(size_t i = 0; i < m; ++i)
  {
    int a, b;
    scanf("%d %d", &a, &b);
    graph[a].push_back(b);
  }
  
  for(size_t i = 1; i <= n; ++i)
    cost[i] = -1;
  
  cost[s] = 0;
  queue<int> q;
  q.push(s);
  
  while(!q.empty())
  {
    int node = q.front();
    q.pop();
    
    for(list<int>::iterator it=graph[node].begin(); it != graph[node].end(); ++it)
    {
      if(cost[*it] == -1)
      {
        cost[*it] = cost[node] + 1;
        q.push(*it);
      }
    }
  }
  
  for(size_t i = 1; i <= n; ++i)
    printf("%d ", cost[i]);
  
  return 0;
}