Cod sursa(job #2396858)

Utilizator ICHBogdanIordache Bogdan-Mihai ICHBogdan Data 3 aprilie 2019 21:20:21
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 kb
#include<iostream>
#include <list>
#include <fstream>

using namespace std;

class Graph
{
    int V;

    list<int> *adj;
public:
    Graph(int V);
    void addEdge(int v, int w);
    void BFS(int s);
};

Graph::Graph(int V)
{
    this->V = V;
    adj = new list<int>[V+1];
}

void Graph::addEdge(int v, int w)
{
    adj[v].push_back(w);
}

void Graph::BFS(int s)
{

    int *contor = new int[V+1], sursa = s;
    for(int t = 0; t <= V; t++)
    {
        contor[t] = 0;
    }
    bool *visited = new bool[V+1];
    for(int i = 1; i <= V; i++)
        visited[i] = false;

    list<int> queue;

    visited[s] = true;
    queue.push_back(s);

    list<int>::iterator i;

    while(!queue.empty())
    {

        s = queue.front();
        queue.pop_front();

        for (i = adj[s].begin(); i != adj[s].end(); ++i)
        {
            if (!visited[*i])
            {
                visited[*i] = true;
                contor[*i] = 1 + contor[s];
                queue.push_back(*i);
            }
        }
    }
    ofstream fout("bfs.out");
    for(int t = 1; t <= V; t++)
    {
        if(visited[t])
            fout<<contor[t]<<" ";
        else
            fout<<"-1 ";
    }
}

int main()
{
    ifstream fin("bfs.in");
    int noduri, muchii, sursa, x, y;
    fin>>noduri>>muchii>>sursa;
    if(noduri < 2) return 0;
    Graph g(noduri);
    for(int i = 0; i < muchii; i++)
    {
        fin>>x>>y;
        g.addEdge(x, y);
    }

    g.BFS(2);

    return 0;
}