Cod sursa(job #1400985)

Utilizator bogdanciurezubogdan ciurezu bogdanciurezu Data 25 martie 2015 16:42:28
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <vector>
#define nmax 1000050

using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
vector <int> v[nmax], cd;
int N, M, S, poz = 1, c, nr,Cost[nmax], ocupat[nmax];
void mark(int nod){
    int j;
    for(j = 1; j <= v[nod].size(); ++j){
        if(!ocupat[j]){
            cd.push_back(v[nod][j]);
            if(Cost[j])
                Cost[j] = min(Cost[j], Cost[nod] + 1);
            else Cost[j] = Cost[nod] + 1;
        }
    }
}
void BFS(){
    int i;
        for(i = 1; i <= cd.size(); ++i){
            ocupat[cd[i]] = true;
            mark(cd[i]);
        }
}
int main()
{int i, x, y;
    f>>N>>M>>S;
    for(i = 1; i <= M; ++i){
        f>>x>>y;
        v[x].push_back(y);
    }

    cd.push_back(S);
    Cost[S] = 1;
    BFS();
    for(i = 1; i <= N; ++i){
        g<<Cost[i] - 1 <<' ';
    }
    return 0;
}