Cod sursa(job #2201772)

Utilizator Stoica_TudorStoica Tudor Stoica_Tudor Data 5 mai 2018 22:42:42
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define MAX 100005
#define oo 1<<30
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int n,m,start;
queue <int> coada;
vector <int> muchii[MAX];
bool viz[MAX];
int dist[MAX];
void citire()
{
    fin>>n>>m>>start;

    for(int i=1;i<=m;i++)
    {
        int a,b;
        fin>>a>>b;

        muchii[a].push_back(b);
    }
    for(int i=1;i<=n;i++)
    {
        viz[i]=false;
        dist[i]=oo;
    }
    dist[start]=0;
    coada.push(start);
}

void bfs(int nod)
{
    if(viz[nod]==false){
    //fout<<nod<<" ";
    viz[nod]=true;
    coada.pop();
    for(size_t i=0;i<muchii[nod].size();i++)
    {
        int nod_vecin=muchii[nod][i];

        if(viz[nod_vecin]==false)
        {
            coada.push(nod_vecin);
        }

        if(dist[nod_vecin]==oo)
        {
            dist[nod_vecin]=dist[nod]+1;
        }
    }

    if(!coada.empty())
    {
        bfs(coada.front());
    }

    }
}

int main()
{
    citire();
    bfs(start);

    for(int i=1;i<=n;i++)
   {
      if(dist[i]==oo) fout<<-1<<" ";

       else fout<<dist[i]<<" ";
    }

    return 0;
}