Cod sursa(job #290335)

Utilizator snaked31Stanica Andrei snaked31 Data 27 martie 2009 19:26:31
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
#include <algorithm>
#include <deque>
#include <vector>

using namespace std;

#define nm 100010


vector <int> v[nm];
vector <int>::iterator it;
deque <int> q;
int c[nm], viz[nm];
int n, m, s, i, x, y;



void read()

{
	scanf("%d %d %d ", &n, &m, &s);
	for (i=1; i<=n; ++i)
	{
		c[i] = 0;
	}
	for (i=1; i<=m; ++i)
	{
		scanf("%d %d ", &x, &y);
		v[x].push_back(y);
		//v[x][++v[x][0]] = y;

		v[y].push_back(x);
		//v[y][++v[y][0]] = x;
	}
}


void bfs(int p)

{
	q.push_back(p);
	viz[p] = 1;

	while (q.size())
	{
		p = q[0];
		q.pop_front();
		for (it=v[p].begin(); it != v[p].end(); ++it)
		{
			if (viz[*it] == 0)
			{
				viz[*it] = 1;
				q.push_back(*it);
				c[*it] = c[p] + 1;
			}
		}
	}
}


void solve()

{
	bfs(s);
}


void write()

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


int main()

{
	freopen("bfs.in", "r", stdin);
	freopen("bfs.out","w",stdout);

	read();
	solve();
	write();

	return 0;
}