Mai intai trebuie sa te autentifici.

Cod sursa(job #2797336)

Utilizator Angel2IonitaAngel Ionita Angel2Ionita Data 9 noiembrie 2021 19:00:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>

using namespace std;

ifstream f("bfs.in");
ofstream o("bfs.out");
class Graph
{
public:
    vector<vector<int>> adjList;
    int size;
    Graph(int n)
    {
        size = n + 1;
        adjList.resize(size);
    }
    void addEdge(int start, int end)
    {
        adjList[start].push_back(end);
    }
    void printGraph()
    {
        for (int i = 1; i < size; i++)
        {
            cout << i << " --> ";
            for (int v : adjList[i])
            {
                cout << v << " ";
            }
            cout << endl;
        }
    }
    void BFS(int node)
    {
        vector<int> Cost;
        queue<int> Q;
        for (int i = 1; i <= size; i++)
            Cost.push_back(-1);
        Cost[node] = 0;
        Q.push(node);
        while (!Q.empty())
        {
            node = Q.front();
            Q.pop();
            for (auto i : adjList[node])
                if (Cost[i] == -1)
                {
                    Cost[i] = Cost[node] + 1;
                    Q.push(i);
                }
        }
        for (int i = 1; i <= size - 1; i++)
            o << Cost[i] << " ";
    }
};

int main()
{

    int n, m, s;
    int x, y;
    f >> n >> m >> s;
    Graph g(n);
    for (int i = 1; i <= m; i++)
    {
        f >> x >> y;
        g.addEdge(x, y);
    }
    g.BFS(s);

    return 0;
}