Cod sursa(job #2594670)

Utilizator radu.millio15Radu Millio radu.millio15 Data 6 aprilie 2020 15:09:26
Problema BFS - Parcurgere in latime Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 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, list<int> graphList[], FILE *fout) {
    queue<int> q;
    int dist[MAX_NODE_COUNT], vizitat[MAX_NODE_COUNT];
    memset(dist, -1, 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();
        list<int>::iterator it;
        for (it = graphList[nod].begin(); it != graphList[nod].end(); it++) {
            if (vizitat[*it] == 0) {
                q.push(*it);
                vizitat[*it] = 1;
                dist[*it] = dist[nod] + 1;
            }
        }
        q.pop();
    }
    for (int i = 1; i <= n; i++) {
        fprintf(fout, "%d ", dist[i]);
    }
}

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);
    list<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);
    }
    // list<int>::iterator it;
    // for (int i = 1; i <= n; i++) {
    //     fprintf(fout, "%d: ", i);
    //     for (it = graphList[i].begin(); it != graphList[i].end(); it++) {
    //         fprintf(fout, "%d ", *it);
    //     }
    //     fprintf(fout, "\n");
    // }
    bfs(src, n, graphList, fout);
    fclose(fin);
    fclose(fout);
    return 0;
}