Cod sursa(job #1447730)

Utilizator Player1Player 1 Player1 Data 5 iunie 2015 04:09:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <vector>
#include <queue>

using namespace std;

#define NMAX 100002

int N, M, Source, index;
vector <int> A[NMAX];
queue <int> Q;
bool visited[NMAX];
int Cost[NMAX];

void BFS()
{
    int i, nod;
	
	for (i = 0; i < 100001; i++)
        Cost[i] = -1;
	
	Q.push(Source);
	visited[Source] = true;
	Cost[Source] = 0;
	
	while (!Q.empty())
    {
		nod = Q.front();
		Q.pop();
        for (i = 0; i < A[nod].size(); i++)
            if (!visited[A[nod][i]])
            {
                visited[A[nod][i]] = true;
                Cost[A[nod][i]] = Cost[nod] + 1;
                Q.push(A[nod][i]);
            }
    }
}   

int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
	
	int i, x, y;
	
	scanf("%d %d %d ", &N, &M, &Source);
	
	for (i = 1; i <= M; i++) 
    {
        scanf("%d %d ", &x, &y);
        A[x].push_back(y);
    }
		
	BFS();
	 
    for (i = 1; i <= N; i++) 
		printf("%d ", Cost[i]);
    printf("\n");
 
    return 0;
}