Cod sursa(job #1771952)

Utilizator AetheryonStefan Bereghici Aetheryon Data 6 octombrie 2016 11:50:55
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 100013;
const int inf = 0x3f3f3f;

class DirectedGraph {
    private :
        int nodes;
        int edges;
        bool used[Nmax];
        vector <int> AdjList[Nmax];

    public :
        DirectedGraph(int n,int m){
            this->nodes = n;
            this->edges = m;
            for (int i=1;i<=n;++i){
                used[i] = 0;
                AdjList[i].clear();
            }
        }

        void addEdge(int from,int to){
            AdjList[from].push_back(to);
        }

        vector<int> bfs(int source){
            queue  <int> q;
            vector <int> dist(Nmax,inf);
            q.push(source);
            used[source] = 1;
            dist[source] = 0;
            while(!q.empty()){
                source = q.front();
                q.pop();
                for (int i=0;i<AdjList[source].size();++i){
                    int to = AdjList[source][i];
                    if (!used[to]){
                        used[to] = 1;
                        q.push(to);
                        dist[to] = min(dist[to],dist[source]+1);
                    }
                }
            }
            return dist;
        }
};

int main(void){
    ifstream cin("bfs.in");
    ofstream cout("bfs.out");
    int n,m,s,from,to;
    cin>>n>>m>>s;
    DirectedGraph *graph = new DirectedGraph(n,m);
    for (int i=0;i<m;++i){
        cin>>from>>to;
        graph->addEdge(from,to);
    }
    vector <int> dist = graph->bfs(s);
    for (int i=1;i<=n;++i){
        cout<<((dist[i]==inf) ? -1 : dist[i])<<" ";
     }
    return 0;
}