Cod sursa(job #1654196)

Utilizator DanBrezeanuBrezeanu Dan DanBrezeanu Data 16 martie 2016 21:19:24
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>

using namespace std;

const int NMAX = 100005;

vector<int> G[NMAX];
queue<int> q;
bool viz[NMAX];
int d[NMAX];

void bfs(int u)
{
	q.push(u);
	viz[u] = 1;
	
	while(!q.empty())
	{
		u = q.front();
		q.pop();
		
		for(size_t i=0;i<G[u].size();++i)
			if(!viz[G[u][i]])
			{
					viz[G[u][i]] = 1;
					q.push(G[u][i]);
					
					d[G[u][i]] = d[u] + 1;
			
			}
	
	
	}


}

int main()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
	
	int n,m,Start,pos1,pos2;
	
	scanf("%d%d%d",&n,&m,&Start);
	
	for(int i=1;i<=m;++i)
	{
			scand("%d%d",&pos1,&pos2);
			
			G[pos1].push_back(pos2);
	}
	
	bfs(Start);
	
	for(int i=1;i<=n;++i)
	{
		if(i==Start)
		{
			printf("0 ");	
			continue;
		}
		
		if(d[i] == 0)
		{
			printf("-1 ");
			continue;
		}
		
			printf("%d ",d[i]);
	}	
		
		printf("\n");
		
		return 0;
	

}