Cod sursa(job #228299)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 6 decembrie 2008 21:53:43
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cassert>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <queue>
#include <map>
#include <bitset>
#include <algorithm>
#define oo 1<<29
#define mp make_pair
#define pb push_back
#define LL long long
#define FIN "bfs.in"
#define FOUT "bfs.out"
#define N 100001
using namespace std;
queue<pair<int,int> > Q;
vector<int> A[N];
pair<int,int> Now;
int dist[N],n,m,s;
int main(){
    int i,a,b;
    freopen(FIN,"r",stdin);
    freopen(FOUT,"w",stdout);
    scanf("%d%d%d",&n,&m,&s);
    while (m--){
        scanf("%d%d",&a,&b);
        A[a].pb(b);
    }
    Q.push(mp(s,0));
    for (i = 1; i <= n; ++i)
        dist[i] = -1;
    while (!Q.empty()){
        Now = Q.front(); Q.pop();
        dist[Now.first] = Now.second;
        for (i = 0; i < A[Now.first].size(); ++i)
            if (dist[A[Now.first][i]] == -1){
                Q.push(mp(A[Now.first][i],Now.second + 1));
                dist[A[Now.first][i]] == Now.second + 1;
            }
    }
    for (i = 1; i <= n; ++i)
        printf("%d ",dist[i]);
}