Cod sursa(job #469113)

Utilizator IrnukIrina Grosu Irnuk Data 6 iulie 2010 13:52:02
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include<fstream>
#include<iostream>
#include<vector>
#include<list>
#include<queue>

#define NMAX 100005

using namespace std;

long n,m,s;
fstream fin,fout;
long vizitat[NMAX];

struct Nod
{
	long varf;

	Nod(long nvarf)
	{
		varf=nvarf;
	}
};

vector<list<Nod>> G;
vector<long> BFS;

void bfs(long x)
{
	queue<long> coada;

	coada.push(x);
	vizitat[x]=0;
	BFS.push_back(x);
	while(coada.size()!=0)
	{
		x=coada.front();
		coada.pop();
		list<Nod>::iterator itr;
		if(G[x].size()!=0)
		{
			for(itr=G[x].begin(); itr != G[x].end(); itr++)
			{
				if(vizitat[(*itr).varf]==-1)
				{
					BFS.push_back((*itr).varf);
					coada.push((*itr).varf);
					vizitat[(*itr).varf]=vizitat[x]+1;
				}
			}
		}
		
	}
	//vector<long>::iterator itrV;
	//for(itrV=BFS.begin(); itrV!=BFS.end(); itrV++)
	//	fout<<*itrV<<" ";
}

int main()
{
	long i,x,y;
	fin.open("bfs.in",ios::in);
	fout.open("bfs.out",ios::out);
	list<Nod> lista;
	fin>>n>>m>>s;
	
	for(i=0;i<=n;i++)
	{
		G.push_back(lista);
		vizitat[i]=-1;
	}

	for(i=0;i<m;i++)
	{
		fin>>x>>y;
		G[x].push_back(Nod(y));
	}

	bfs(s);
	for(i=1;i<=n;i++)
		fout<<vizitat[i]<<" ";
	fout<<endl;
	fin.close();
	fout.close();
	return 0;
}