Cod sursa(job #1869021)

Utilizator FrequeAlex Iordachescu Freque Data 5 februarie 2017 15:32:01
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

const int NMAX = 100000 + 5;

queue <int> q;
vector <int> graph[NMAX];
bool vis[NMAX];
int dist[NMAX];

int cnt, n, m, s;

void Read()
{
    fin >> n >> m >> s;
    for (int i = 1; i <= m; ++i)
    {
        int a, b;
        fin >> a >> b;
        graph[a].push_back(b);
    }
}

void bfs()
{
    int nod;
    vis[s] = 1;
    q.push(s);
    while(!q.empty())
    {
        nod = q.front();
        q.pop();
        for (int i = 0; i < graph[nod].size(); ++i)
        {
            if(vis[graph[nod][i]])
            {
                vis[graph[nod][i]] = 1;
                dist[graph[nod][i]] = dist[nod] + 1;
                q.push(graph[nod][i]);
            }
        }
    }
}

int main()
{
    Read();
    bfs();
    for (int i = 1; i <= n; ++i)
    {
        if (!vis[i])
            fout << -1;
        else
            fout << dist[i];
        if(i == n)
            fout << '\n';
        else
            fout << " ";
    }
    return 0;
}