Cod sursa(job #1614492)

Utilizator GabiADAndrei Gabriel GabiAD Data 25 februarie 2016 22:57:31
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <vector>
#include <queue>

using namespace std;

vector <vector <int>> graph;
vector <int> visited;
unsigned int n, m, p, k;


void BFS(unsigned int vertex)
{
  if(vertex < 0 || vertex > n-1)
    return;

  unsigned int element, i;
  queue <int> q;

  q.push(vertex);

  visited[vertex] = 0;
 
  while(!q.empty())
    {
      element = q.front();

      for (i = 0; i < graph[element].size(); i++)
	{
	  if(!visited[graph[element][i]] && p != graph[element][i])
	    {
	      q.push(graph[element][i]);
	      visited[graph[element][i]] = k;

	      
	    }
	  
	}

      k++;
      q.pop();

    }
}



int main()
{
  freopen("bfs.in", "r", stdin);
  freopen("bfs.out", "w", stdout);
  
  cin >> n >> m >> p;
  graph.resize(n);
  
  visited.resize(n, false);

  int x, y;
  unsigned int i;

  for (i = 0; i < m; i++)
    {
      cin >> x >> y;

      x--;
      y--;

      graph[x].push_back(y);
    }
  
  p--;
  BFS(p);
  
  
  for (i = 0; i < visited.size() && i < n; i++)
    if(!visited[i] && i != p)
      visited[i] = -1;


  for (i = 0; i < n; i++)
    {
      cout << visited[i] << " ";    
    }


  
  return 0;
}