Cod sursa(job #1705317)

Utilizator elena.marinicaMarinica Elena-Georgiana elena.marinica Data 20 mai 2016 12:04:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
#include <string.h>

void bfs(int s, int dist[], std::vector<int> g[], int n) {
	
	std::queue<int> q;
	bool visited[n + 1];
	memset(visited, false, sizeof(bool) * (n + 1));
	
	q.push(s);
	visited[s] = true;
	
	while (!q.empty()) {
		
		int node = q.front();
		q.pop();
		
		for (unsigned int i = 0; i < g[node].size(); i++) {
			if (!visited[g[node][i]]) {
			
				visited[g[node][i]] = true;
				q.push(g[node][i]);
				dist[g[node][i]] = dist[node] + 1;
			}
		}
	}
}

int main() {
	
	int n, m, s, x, y;
	
	FILE* fin = fopen("bfs.in", "r");
	FILE* fout = fopen("bfs.out", "w");
	
	fscanf(fin, "%d %d %d", &n, &m, &s);
	
	std::vector<int> graf[n + 1];
	int dist[n + 1];
	
	memset(dist, 0, sizeof(int) * (n + 1));
	
	for (int i = 1; i <= m; i++) {
		fscanf(fin, "%d %d", &x, &y);
		graf[x].push_back(y);
	}
	
	fclose(fin);
	
	bfs(s, dist, graf, n);
	
	for (int i = 1; i <= n; i++) {
		if (dist[i] == 0 && i != s) {
			dist[i] = -1;
		}
		
		fprintf(fout, "%d ", dist[i]);
	}
	fclose(fout);
	
	return 0;
}