Cod sursa(job #1651236)

Utilizator adrian.popoviciPopovici Adrian adrian.popovici Data 12 martie 2016 19:55:06
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

vector <vector <int> > graf;
int n,m,X;
bool vizitat[100];

ofstream g("bfs.out");
void Citire()
{
    ifstream f("bfs.in");
    f>>n>>m>>X;
    if (n<2||n>100000||m<1||m>1000000)
        return;
    graf.resize(n);
    for (int i=0;i<m;i++)
    {
        int x,y;
        f>>x>>y;
        if (x!=y)
        {
            x--;
            y--;
            graf[x].push_back(y);
        }
    }
}

void ResetViz ()
{
    for (int i=0;i<n;i++)
        vizitat[i]=false;
}

void BFS(int x)
{
    int element;
    queue <int> coada;
    coada.push(x);
    vector <int> nrpasi;
    vizitat[x]=true;
    nrpasi.resize(n, 0);


    while (!coada.empty())
    {
        element=coada.front();
        for (unsigned int i=0;i<graf[element].size();i++)
        {
            if (vizitat[graf[element][i]]==false)
            {
                vizitat[graf[element][i]]=true;
                nrpasi[graf[element][i]]=nrpasi[element]+1;
                coada.push(graf[element][i]);
            }
        }
        coada.pop();
    }

    for (int i=0;i<n;i++)
        if (vizitat[i]==false)
            nrpasi[i]=-1;

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



int main ()
{
    Citire();
    BFS(X-1);
    g.close();

    return 0;
}