Cod sursa(job #981154)

Utilizator petrutsxMihaela Petruta Gaman petrutsx Data 6 august 2013 15:05:46
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<stdio.h>
#include<queue>
#define NMAX 100001
using namespace std;

int vis[NMAX], d[NMAX];

struct Node{
	int value;
	struct Node *next;
};

int N, M, S;
struct Node *L[NMAX];

void read(FILE *pf){
	struct Node *p;
	int i, u, v;
	fscanf(pf, "%d %d %d", &N, &M, &S);
	for(i = 1; i <= N; i++){
		d[i] = 0;
		vis[i] = 0;
	}
	for(i = 1; i <= M; i++){
		fscanf(pf, "%d %d", &u, &v);
		p = new Node;
		p->value = v;
		p->next = L[u];
		L[u] = p;
		
	}
}

void BFS(int S){
	struct Node *p;
	int u, v;
	queue<int> Q;

	Q.push(S);
	vis[S] = 1;
	while(!Q.empty()){
		u = Q.front();
		Q.pop();
		p = L[u];
		while(p != NULL){
			v = p->value;
			if(vis[v] == 0){
				Q.push(v);
				d[v] = d[u] + 1;
				vis[v] = 1;
			}
			p = p->next;
		}
	}
}

void print(FILE *pg){
	int i;
	for(i = 1; i <= N; i++){
		if(d[i] == 0 && i != S)
			d[i] = -1;
		fprintf(pg, "%d ", d[i]);
	}
}

int main(){
	FILE *pf, *pg;
	pf = fopen("bfs.in", "r");
	pg = fopen("bfs.out", "w");

	read(pf);
	BFS(S);
	print(pg);

	fclose(pf);
	fclose(pg);

	return 0;
}