Cod sursa(job #1808322)

Utilizator zhm248Mustatea Radu zhm248 Data 17 noiembrie 2016 16:53:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
vector<int>g[100005];
queue<int>q;
int d,s,sol[100005];
bool viz[100005];
void bfs(int x)
{
	for(int i=0;i<g[x].size();++i)
	{
		if(!viz[g[x][i]])
		{
			q.push(g[x][i]);
			sol[g[x][i]]=sol[x]+1;
			viz[g[x][i]]=1;
		}
	}
	q.pop();
	if(!q.empty())
		bfs(q.front());
}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	int n,m,x,i,y;
	scanf("%d%d%d",&n,&m,&s);
	for(i=1;i<=m;++i)
	{
		scanf("%d%d",&x,&y);
		g[x].push_back(y);
	}
	q.push(s);
	viz[s]=1;
	bfs(s);
	for(i=1;i<=n;++i)
	{
		if(sol[i]==0&&i!=s)
			printf("-1 ");
		else
			printf("%d ",sol[i]);
	}
	return 0;
}