Cod sursa(job #2594940)

Utilizator maria_mMaria Mosneag maria_m Data 6 aprilie 2020 19:58:55
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <list>
#include <array>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NMAX 100005

using namespace std;

void bfs(vector<int> lg[], int node, int n, FILE *out) {
    queue<int> q;
    int i, dist[NMAX], pp, p, viz[NMAX];
    memset(dist, -1, NMAX);
    memset(viz, 0, NMAX);
    dist[node] = 0;
    viz[node] = 1;
	q.push(node);

    while (!q.empty()) {
       	pp = q.front();
        for (i = 0; i < lg[pp].size(); i++) {
        	p = lg[pp][i];
            if (viz[p] == 0) {
                dist[p] = dist[pp] + 1;
                q.push(p);
                viz[p] = 1;
            }
        }
        q.pop();
    }

    for (i = 1; i <= n; i++) {
    	fprintf(out, "%d ", dist[i]);
    }

}

int main() {
	FILE *in = fopen("bfs.in", "rt"), *out = fopen("bfs.out", "wt");
	int n, m, i, x, y, src;
	vector<int> lg[NMAX];

	fscanf(in, "%d%d%d", &n, &m, &src);

	for (i = 0; i < m; ++i) {
        fscanf(in, "%d%d", &x, &y);
        lg[x].push_back(y);
    }
    
    bfs(lg, src, n, out);

    fclose(in);
    fclose(out);
}