Cod sursa(job #936265)

Utilizator s1mpMihai Alexandru s1mp Data 6 aprilie 2013 14:24:11
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
using namespace std;

#define Nmax 100000

vector <int> lista[Nmax];
queue <int> Q;

int n,m,vizitat[Nmax],Start;

void creare(char *g)
{ifstream f(g);
f>>n;
f>>m;
f>>Start;
int i,x,y;
for (i=1;i<=m;i++)
	{f>>x;
	 f>>y;
	 lista[x].push_back(y);}}

void prelucrare()
{int k=Q.front();
for(unsigned int i=0;i<lista[k].size();++i) if (vizitat[lista[k][i]]==-1) {vizitat[lista[k][i]]=vizitat[k]+1;Q.push(lista[k][i]);}
Q.pop();}

void bf(int k)
{vizitat[k]=0;
Q.push(k);
while (!Q.empty()) prelucrare();}

void init()
{for(int i=1;i<=n;i++)
	vizitat[i]=-1;}

int main()
{creare("bfs.in");
init();
bf(Start);
ofstream g("bfs.out");
for(int i=1;i<=n;i++)
	g<<vizitat[i]<<" ";
return 0;
}