Cod sursa(job #2043185)

Utilizator TudorFinaruTudor Cristian Finaru TudorFinaru Data 19 octombrie 2017 18:37:55
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include<set>
#include<queue>
#include<iostream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int cost[100003],n,m,s;
bool viz[100003];
set<int> v[100003];
set<int>::iterator it;
queue<int>c;


void afis()
{
    int ii; cin>>ii;
    for(ii=1;ii<=n;ii++) cout<<cost[ii]<<' ';
    cout<<'\n';
}

void bfs()
{
    c.push(s);
    cost[s]=0;
    viz[s]=1;
    int p,u,xx;
    p=u=1;
    while(!c.empty())
    {
       // afis();
        xx=c.front();
        if(v[xx].size()>0)
        {
            for(it=v[xx].begin();it!=v[xx].end();++it)
            if(!viz[*it])
            {
                int aux=*it;
                c.push(aux);
                cost[aux]=cost[xx]+1;
                viz[aux]=1;
            }
        }
        c.pop();
    }
}

int main()
{
    int i,x,y;
    f>>n>>m>>s;
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        v[x].insert(y);
        //v[y].insert(x);
    }
    bfs();
    for(i=1;i<=n;i++) if(i!=s && cost[i]==0) g<<-1<<' ';
        else
        g<<cost[i]<<' ';
    g<<'\n';
    f.close();
    g.close();
    return 0;
}