Cod sursa(job #680286)

Utilizator an_drey_curentandreycurent an_drey_curent Data 15 februarie 2012 12:29:20
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<stdio.h>
#include<vector>
#include<queue>
#define MAX 100001
using namespace std;
int N,M,S;
vector<int>vecini[MAX];
queue<int>coada;
int cost[MAX];
bool vizitat[MAX];
void deschidere()
{
	freopen("bfs.in","r",stdin);
	freopen("bfs.out","w",stdout);
}
void citire()
{
	int x,y;
	scanf("%d%d%d",&N,&M,&S);
	while(M--)
	{
		scanf("%d%d",&x,&y);
		vecini[x].push_back(y);
	}
}
void bfs()
{
	coada.push(S);
	vizitat[S]=1;
	while(coada.size())
	{
		int nod_curent=coada.front();
		int lungime=vecini[nod_curent].size();
		for(int i=0;i<lungime;i++)
		{
			int nod_vecin=vecini[nod_curent][i];
			if(!vizitat[nod_vecin])
			{
				coada.push(nod_vecin);
				cost[nod_vecin]=1+cost[nod_curent];
				vizitat[nod_vecin]=1;
			}
		}
		coada.pop();
	}
}
void afisare()
{
	int aux=0;
	while(++aux<=N)
		if(!vizitat[aux])
			printf("-1 ");
		else
			printf("%d ",cost[aux]);
}
int main()
{
	deschidere();
	citire();
	bfs();
	afisare();
	return 0;
}