Cod sursa(job #243195)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 12 ianuarie 2009 13:26:28
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 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,viz[N];
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; 
    viz[s] = 1;
    while (!Q.empty()){
        Now = Q.front(); Q.pop();
        dist[Now.first] = Now.second;
        for (i = 0; i < A[Now.first].size(); ++i)
            if (!viz[A[Now.first][i]]){
                Q.push(mp(A[Now.first][i],Now.second + 1));
                dist[A[Now.first][i]] == Now.second + 1;
                viz[A[Now.first][i]] = 1;
            }
    }
    for (i = 1; i <= n; ++i)
        printf("%d ",dist[i]);
}