Cod sursa(job #1076245)

Utilizator piroslPiros Lucian pirosl Data 9 ianuarie 2014 23:27:39
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<iostream>
#include<fstream>
using namespace std;

class Node {
public:
	int value;
	Node *next;

	Node() {
		next = NULL;
		value = 0;
	}

	~Node() {
		delete next;
		next = NULL;
	}
};

int main(void) {
	ifstream in;
	ofstream out;

	in.open("bfs.in");
	out.open("bfs.out");

	int n, m, s;
	in >> n >> m >> s;

	int *d = new int[n+1];
	int *colour = new int[n+1];
	int *stack = new int[n+1];

	Node **adj = new Node*[n+1];
	for(int i=0;i<=n;++i) {
		adj[i] = NULL;
		d[i] = -1;
		colour[i] = 0;
	}

	while(!in.eof()) {
		int start, end;
		in >> start >> end;

		Node *n = new Node();
		n->value = end;
		n->next = adj[start];
		adj[start] = n;
	}

	int stackHead = 0;
	int stackTail = 0;

	d[s] = 0;
	colour[s] = 1;
	stack[stackTail++] = s;

	while(stackHead < stackTail) {
		int curent = stack[stackHead++];
		Node *n = adj[curent];
		while(n != NULL) {
			if(colour[n->value] == 0) {
				d[n->value] = d[curent]+1;
				stack[stackTail++] = n->value;
				colour[n->value] = 1;

			}
			n = n->next;
		}
		colour[curent] = 2;
	}

	
	for(int i = 1; i <= n; ++i) 
		out << d[i] << " ";
	out << "\n";
	
	delete[] d;
	delete[] colour; 
	delete[] stack;

	for(int i=0;i<=n;++i) {
		Node *n = adj[i];
		delete n;
	}
	
	delete[] adj;

	out.close();
	in.close();

	return 0;
}