Cod sursa(job #1981898)

Utilizator cyg_Miky2003Dancaescu Mihai cyg_Miky2003 Data 17 mai 2017 09:58:24
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>

using namespace std;

const int NMAX = 1000;

vector<int> G[NMAX + 5];
int viz[NMAX + 5], t[NMAX + 5], d[NMAX + 5];

void BFS(int u, int cc)
{
  int v;
  queue<int> q;
  viz[u] = cc;
  q.push(u);
  while(!q.empty())
  {
    u = q.front();
    for(int j = 0;j < G[u].size();++j)
    {
      v = G[u].at(j);
      if(!viz[v])
      {
        viz[v] = cc;
        t[v] = u;
        d[v] = d[u] + 1;
        q.push(v);
      }
    }
    q.pop();
  }
}

int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    int n, m, u, v, cc = 0, s;
    stack<int> ans;
    scanf("%d%d%d", &n, &m, &s);
    for(int i = 1;i <= m;++i)
    {
      scanf("%d%d", &u, &v);
      G[u].push_back(v);
    }
    BFS(s, 1);
    for(int node = 1;node <= n;++node)
    {
      u = d[node];
      if(u == 0 && node == s)
        printf("0 ");
      if(u == 0 && node != s)
        printf("-1 ");
      if(u != 0)
        printf("%d ", u);
    }
    return 0;
}