Cod sursa(job #1650135)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 11 martie 2016 16:47:20
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>

using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");
const int NMAX = 100001;
vector<int> muchii[NMAX];
int n,m,s;
int way[NMAX];
queue<int> coada;
bitset<NMAX> mark;

void citire()
{
    in>>n>>m>>s;
    int x,y;
    for(int i=1;i<=m;i++)
    {
        in>>x>>y;
        muchii[x].push_back(y);
    }
    in.close();
}

void bfs()
{
    for(int i=1;i<=n;i++)
        way[i] = -1;
    way[s] = 0;
    coada.push(s);
    mark.set(s);
    int y;
    while(!coada.empty())
    {
        y = coada.front();
        for(unsigned int i = 0;i<muchii[y].size();i++)
            if(!mark.test(muchii[y][i]))
        {
            coada.push(muchii[y][i]);
            mark.set(muchii[y][i]);
            way[muchii[y][i]] = way[y]+1;
        }
        coada.pop();
    }
}

int main()
{
    citire();
    bfs();
    for(int i=1;i<=n;i++)
       out<<way[i]<<" ";
    out.close();
    return 0;
}