Cod sursa(job #1527267)

Utilizator kassay_akosKassay Akos kassay_akos Data 17 noiembrie 2015 22:48:31
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string.h>
#include <queue>
#define nmax 100002
using namespace std;
int n,m,s, vis[nmax], dis[nmax];
vector <int> v[nmax] ;

void bfs() {
    memset(vis, 0, n+1);          // non were visited
    memset(dis, -1, n+1);         // the distance is -1 == infinite
    fill(dis+1,dis+n+1,-1);
    queue<int> Q;
    Q.push(s);
    vis[s] = 1;
    dis[s] = 0;

    while (!Q.empty()) {
        int nod = Q.front();
        Q.pop();
        for(unsigned int i = 0; i < v[nod].size(); i++) {
            if (dis[v[nod][i]] == -1 ) {
                dis[v[nod][i]] = dis[nod] + 1 ;
                Q.push(v[nod][i]);
            }
        }
    }

}

int main()
{
    freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
    scanf("%d %d %d",&n, &m, &s);
    int a,b;
    for(int i = 0; i<m; i++) {
        scanf("%d %d",&a, &b);
        v[a].push_back(b);
    }

    bfs();

    for (int i = 1; i<=n; i++) {
        printf("%d ",dis[i]);
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}