Cod sursa(job #3316312)

Utilizator alexia.amsAlexia Seitan alexia.ams Data 18 octombrie 2025 12:21:25
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.78 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>

using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

const int maxN = 100010;
vector<int> graph[maxN];
int gradNod[maxN], dist[maxN], que[maxN];

void BFS(int startNode)
{
    int i,j, cnt=1;
    dist[startNode]=0;
    que[cnt]=startNode;
 
    for(i=1; i<=cnt; i++) // pana cand coada e goala
        for(j=0; j<gradNod[que[i]]; j++) // iau fiecare vecin al nodului
            if (dist[graph[que[i]][j]]==-1) // daca nu a fost vizitat
            {
                que[++cnt]=graph[que[i]][j]; // il adaug in coada 
                dist[que[cnt]]=dist[que[i]]+1; // dist+1 fata de nodul curent
            }
}

void BFS1(int startNode) // bfs cu coada
{
    queue<int> q;
    dist[startNode]=0;
    q.push(startNode);

    while(!q.empty())
    {
        int currentNode=q.front();
        q.pop();

        for (int vecin : graph[currentNode])
        {   
            if(dist[vecin]==-1)
            {
                dist[vecin]=dist[currentNode]+1;
                q.push(vecin);
            }

        }
    }

    
}

int main()
{
    int n, m, startNode, i, x, y;
    fin>>n>>m>>startNode;

    for (i=1; i<=m; i++) // citesc arcele si pun in lista de adiacenta
    {
        fin>>x>>y;
        graph[x].push_back(y);
    }

    // for (i=1; i<=n; i++)
    // {   fout<<i<<" : ";
    //     for (auto j:graph[i])
    //         fout<<j<<" ";
    //     fout<<endl;
    // }

    for(i=1; i<=n; i++) //salvez gradul fiecarui nod
    {                       
        gradNod[i]=graph[i].size();
        dist[i]=-1;
    }
    //BFS(startNode);
    BFS1(startNode);

    for(i=1; i<=n; i++)
        fout<<dist[i]<<" ";
    
    return 0; 

}