Cod sursa(job #1618545)

Utilizator jeronimoPopovici Daniel jeronimo Data 27 februarie 2016 21:16:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

int n,m;

ifstream f("bfs.in");
ofstream g("bfs.out");

vector<vector<int> > graf;
vector<bool> visited;
vector<int> distanta;
vector<int> nr;

void bfs(int x)
{
    int i,element,j=1,t=0,s=0;
    if(x<0 ||x>n-1)
        return;
    queue<int> q;
    q.push(x);
    visited[x]=true;
    element=q.front();
    distanta[element]=0;
    while(!q.empty())
    {
        element=q.front();
        for(i=0; i<graf[element].size(); i++)
        {
            if(!visited[graf[element][i]])
            {
                q.push(graf[element][i]);
                visited[graf[element][i]]=true;
                distanta[graf[element][i]]=distanta[q.front()]+1;
            }
        }
        q.pop();
    }
}

int main()
{
    int i,s,x,y;
    f>>n>>m>>s;
    graf.resize(n);
    visited.resize(n,false);
    distanta.resize(n,-1);
    nr.resize(n);
    for(i=0; i<m; i++)
    {
        f>>x>>y;
        if(x!=y)
        {
            x--;
            y--;
            graf[x].push_back(y);
        }
    }
    bfs(s-1);
    for(i=0;i<distanta.size();i++)
        g<<distanta[i]<<" ";
}