Cod sursa(job #1570972)

Utilizator cristid9Cristi D cristid9 Data 16 ianuarie 2016 22:41:47
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <stack>
#include <vector>
#include <utility>
#include <algorithm>

using namespace std;

class Digraph
{
    private:
       vector<vector<int>> edges;
       int nodes;

    public:

        Digraph(int v)
        {
            nodes = v;

            for (int i = 0; i < nodes; i++)
                edges.push_back(vector<int>());
        }

        void addEdge(int v, int w)
        {
            edges[v].push_back(w);
        }

        vector<int> adj(int v)
        {
            return edges[v];
        }

        int size() const
        {
            return nodes;
        }
};


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

    int vertices, arcs, s;

    fin >> vertices >> arcs >> s;
    Digraph *g = new Digraph(vertices);
    s--;

    int v, w;

    while (fin >> v >> w)
    {
        g->addEdge(v - 1, w - 1);
    }

    queue<pair<int, int>> q;
    int marked[vertices];
    fill_n(marked, vertices, -1);

    q.push(make_pair(s, 0));

    while (!q.empty())
    {
        marked[q.front().first] = q.front().second;

        int startValue = q.front().second;

        vector<int> tmp = g->adj(q.front().first);
        for (auto it = tmp.begin(); it != tmp.end(); it++)
        {
            if (marked[*it] == -1)
                q.push(make_pair(*it, startValue + 1));
        }
        q.pop();
    }

    for (int i = 0; i < vertices; i++)
        fout << marked[i] << " ";
    fout << endl;

    fout.close();
    fin.close();

    return 0;
}