Cod sursa(job #369500)

Utilizator Bit_MasterAlexandru-Iancu Caragicu Bit_Master Data 28 noiembrie 2009 15:43:44
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#include <vector>

using namespace std;

const int N = 1<<17;

vector <int> vecin[N];


int coada [N];
int dist [N];

int n,s;

void citire()
{
	int m;
	int x,y;
	scanf("%d%d%d",&n,&m,&s);
	for (int i = 1; i <= m; ++i)
	{
		scanf("%d%d",&x,&y);
		vecin[x].push_back(y);
	}
}

void initializare_dist()
{
	for (int i = 1; i <= n; ++i)
		dist[i] = -1;
}

void calculare()
{
	coada[1] = s;
	dist[s] = 0;
	int p = 1, q = 1;
	int x,y;
	while (q >= p)
	{
		x = coada[p];
		for (int i = 0; i < vecin[x].size(); ++i)
		{
			y = vecin[x][i];
			if (dist[y] != -1)
				continue;
			coada[++q] = y;
			dist[y] = dist[x] + 1;
		}
		++p;
	}
}

void afisare()
{
	for (int i = 1; i <= n; ++i)
		printf("%d ",dist[i]);
}
/*
void afisare_vecini()
{
    for (int i = 1; i <= n; ++i)
    {
        printf ("%d ->",i);
        for (int j = 0; j < vecin[i].size(); ++j)
            printf(" %d",vecin[i][j]);
        printf("\n");
    }
    printf("\n");
}
*/
int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	citire();
	//afisare_vecini();
	initializare_dist();
	calculare();
	afisare();
	return 0;
}