Cod sursa(job #3249185)

Utilizator StefanromanulStefan Parus Stefanromanul Data 15 octombrie 2024 11:38:49
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb

#include <vector>
#include <fstream>
#include <queue>
using namespace std;
ifstream cin("bfs.in");
ofstream cout("bfs.out");
vector <int> g[100005];
int f[100005];
struct nr{
int c,val;
};


queue <nr> q;
void fct()
{
    nr k=q.front();
    if(f[k.val])
    {
        q.pop();
        if(q.size())
        fct();
        return;
    }
    f[k.val]=k.c;
    int n=g[k.val].size();
    for(int i=0;i<n;i++)
    {
        if(f[g[k.val][i]]==0)
            {
                nr b;
                b.val=g[k.val][i];
                b.c=k.c+1;
                q.push(b);

            }
    }
    q.pop();
    if(q.size())
    fct();
}
int main()
{

    int n,m,z;
    cin>>n>>m>>z;
    for(int i=0;i<m;i++)
    {
        int x,y;
        cin>>x>>y;
        g[x].push_back(y);

    }
    nr a;
    a.c=0;
    a.val=z;
    q.push(a);
    fct();
    f[z]=0;
    for(int i=1;i<=n;i++)
    {
        if(f[i]>0)
            cout<<f[i]<<" ";
        else{
            if(i==z)
                cout<<0<<" ";
            else cout<<-1<<" ";
        }
    }
    return 0;
}