Cod sursa(job #1147963)

Utilizator SilverGSilver Gains SilverG Data 20 martie 2014 12:19:38
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
/*
		Keep It Simple!
*/

#include<cstdio>
#include<list>
#include<queue>

#define MaxN 100001

using namespace std;

int N,viz[MaxN],M,S,x,y;
list<int> G[MaxN];
queue<int> Stack;

void BFS(int Source)
{
		viz[Source] = 1;
		Stack.push(Source);

		while(Stack.size())
		{
				int aux = Stack.front();
				Stack.pop();

				for(list<int>::iterator it = G[aux].begin(); it!=G[aux].end(); it++)
				{
						if(!viz[*it])
						{
								viz[*it] += 1+viz[aux]-viz[*it];
								Stack.push(*it);
						}
				}
		}
}

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

		scanf("%d%d%d",&N,&M,&S);
		for(int i=1;i<=M;i++)
		{
				scanf("%d%d",&x,&y);
				G[x].push_back(y);
		}

		BFS(S);


		for(int i=1;i<=N;i++)
			printf("%d ",viz[i]-1);
}