Cod sursa(job #674004)

Utilizator CeachiCeachi Bogdan Ceachi Data 5 februarie 2012 13:23:12
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<fstream>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int a[20][20],n,m,c[100],viz[100],li=1,ls=0,start,d[100];
void citire() {
	fin>>n>>m;
	fin>>start;
	for(int i=1;i<=m;i++) {
		int x,y;
		fin>>x>>y;
		a[x][y]=1;
	}
}
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);
		for(int k=1;k<=n;k++)
			if(a[x][k]==1&&viz[k]==0) {
				viz[k]=1;
				pune(k);
				d[k]=d[x]+1;
			}
	}
}

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;
}