Cod sursa(job #2438215)

Utilizator Horia14Horia Banciu Horia14 Data 11 iulie 2019 17:28:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include<cstdio>
#define MAX_N 100000
using namespace std;

struct node {
    int val;
    node* next;
};

node* g[MAX_N+1];
int dist[MAX_N+1], n, m, S;
int q[MAX_N+5], prim, ultim;

void insertNode(int x, int y) {
    node* elem = new node;
    elem->val = y;
    elem->next = g[x];
    g[x] = elem;
}

void readGraph() {
    int i, x, y;
    FILE* fin = fopen("bfs.in","r");
    fscanf(fin,"%d%d%d",&n,&m,&S);
    for(i = 0; i < m; i++) {
        fscanf(fin,"%d%d",&x,&y);
        insertNode(x,y);
    }
    fclose(fin);
}

void BFS(int source) {
    int i, nod;
    node* p;
    for(i = 1; i <= n; i++)
        dist[i] = -1;
    dist[source] = 0;
    prim = ultim = 0;
    q[prim] = source;
    while(prim <= ultim) {
        nod = q[prim++];
        p = g[nod];
        while(p != NULL) {
            if(dist[p->val] == -1) {
                dist[p->val] = 1 + dist[nod];
                q[++ultim] = p->val;
            }
            p = p->next;
        }
    }
}

void printDistances() {
    FILE* fout = fopen("bfs.out","w");
    for(int i = 1; i <= n; i++)
        fprintf(fout,"%d ",dist[i]);
    fprintf(fout,"\n");
    fclose(fout);
}

int main() {
    readGraph();
    BFS(S);
    printDistances();
    return 0;
}