Cod sursa(job #1932590)

Utilizator Robert29FMI Tilica Robert Robert29 Data 19 martie 2017 21:53:16
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.88 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin ("bfs.in");
ofstream cout ("bfs.out");
class GrafNeorientat
{
    int nrNoduri, nrMuchii, nodStart;
    vector<int> muchii[100001];
    public:
    int GetNrNoduri()
    {
        return nrNoduri;
    }
    int GetNrMuchii()
    {
        return nrMuchii;
    }
    int GetNodStart()
    {
        return nodStart;
    }
    void CitesteGraf()
    {
        cin >> nrNoduri >> nrMuchii >> nodStart;
        for(int i = 1; i <= nrMuchii; ++i)
        {
            int nod1, nod2;
            cin >> nod1 >> nod2;
            muchii[nod1].push_back(nod2);
           // muchii[nod2].push_back(nod1);
        }
    }
    vector<int> BFS()
    {
        queue<int> q;
        q.push(nodStart);
        vector<int> dist;
        for(int i = 0 ; i <= nrNoduri; ++i)
        {
            dist.push_back(0);
        }
        while(!q.empty())
        {
            int nod = q.front();
            for(int i = 0; i < muchii[nod].size(); ++i)
            {
                int vecin = muchii[nod][i];
                if(vecin == nodStart)
                {
                    continue;
                }
                if(dist[vecin] == 0)
                {
                    q.push(vecin);
                    dist[vecin] = dist[nod] + 1;
                }
            }
            q.pop();
        }
        return dist;
    }
    void DFS()
    {

    }
    void ComponenteConexe()
    {

    }
    void MatriceaDrumurilor()
    {

    }
};

int main()
{
    GrafNeorientat graf;
    graf.CitesteGraf();
    vector<int> dist = graf.BFS();

    for(int i = 1; i <= graf.GetNrNoduri(); ++i){
        if(dist[i] != 0 || i == graf.GetNodStart())
            cout << dist[i] << " ";
        else
            cout << "-1 ";
    }

    return 0;
}