Cod sursa(job #2594697)

Utilizator radu.millio15Radu Millio radu.millio15 Data 6 aprilie 2020 15:31:05
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda laborator_7_sd_313cab Marime 1.28 kb
#include <stdio.h>
#include <list>
#include <queue>
#include <array>
#include <stdlib.h>
#include <string.h>
using namespace std;

#define MAX_NODE_COUNT 100005


void bfs(int src, int n, vector<int> graphList[], FILE *fout) {
    queue<int> q;
    int vizitat[MAX_NODE_COUNT], dist[MAX_NODE_COUNT];
    memset(vizitat, 0, MAX_NODE_COUNT);

    q.push(src);
    vizitat[src] = 1;
    dist[src] = 0;

    while (!q.empty()) {
        int nod = q.front();
        for (int j = 0; j < graphList[nod].size(); j++) {
            int u = graphList[nod][j];
            if (vizitat[u] == 0) {
                vizitat[u] = 1;
                dist[u] = dist[nod] + 1;
                q.push(u);
            }
        }
        q.pop();
    }
    for (int i = 1; i <= n; i++) {
        if (vizitat[i] == 0) fprintf(fout, "-1 ");
        else
        fprintf(fout, "%d ", dist[i]);
    }
    return;
}

int main() {
    FILE *fin, *fout;
    fin = fopen("bfs.in", "rt");
    fout = fopen("bfs.out", "wt");
    int n, m, src;
    fscanf(fin, "%d%d%d", &n, &m, &src);
    vector<int> graphList[MAX_NODE_COUNT];
    int x, y;
    for (int i = 0; i < m; i++) {
        fscanf(fin, "%d%d", &x, &y);
        graphList[x].push_back(y);
    }
    bfs(src, n, graphList, fout);
    fclose(fin);
    fclose(fout);
    return 0;
}