Cod sursa(job #674012)

Utilizator CeachiCeachi Bogdan Ceachi Data 5 februarie 2012 13:35:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int n,m,c[100000],viz[100000],li=1,ls=0,start,d[100000];
struct nod {
	int info;
	nod *next;
};

nod *La[100001];

void add_begin(int x,int y) {
	nod *n=new(nod);
	n->info=y;
	n->next=La[x];
	La[x]=n;
}

void citire() {
	fin>>n>>m;
	fin>>start;
	for(int i=1;i<=m;i++) {
		int x,y;
		fin>>x>>y;
		add_begin(x,y);
	}
}
int vid() {
	if(li>ls) return 1;
	else return 0;
}

void pune(int x) {
	ls++;
	c[ls]=x;
}
void scoate(int &x) {
	x=c[li];
	li++;
}
void bf(int i) {
	pune(i);
	viz[i]=1;
	while(!vid()) {
		int x;
		scoate(x);
		nod *nc=La[x];
		while(nc!=NULL) {
			int y=nc->info;
			if(viz[y]==0) {
				viz[y]=1;
				pune(y);
				d[y]=d[x]+1;
			}
			nc=nc->next;
		}
	}
}

int main() {
	citire();
	bf(start);
	for(int i=1;i<=n;i++) {
		if(d[i]==0&&i!=start) d[i]=-1;
		fout<<d[i]<<" ";
	}
	return 0;
}