Cod sursa(job #1736533)

Utilizator HuskyezTarnu Cristian Huskyez Data 1 august 2016 22:39:51
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <queue>
#include <vector>
#include <stdio.h>
#include <cstring>

#define in "bfs.in"
#define out "bfs.out"

using namespace std;

FILE* f = fopen(in, "rt");
FILE* g = fopen(out, "w");

queue<int> q;
vector<int> graph[100005];
int distanta[100005];

int n, m, s;
int nod, vecin;


void BFS(int start)
{
    q.push(start);
    distanta[start] = 0;
    int now;

    while(!q.empty()){
        now = q.front();
        for(int i=0; i<graph[now].size(); i++){
            if(distanta[graph[now][i]] == -1){
                distanta[graph[now][i]] = distanta[now] + 1;
                q.push(graph[now][i]);
            }
        }
        q.pop();
    }
}

int main()
{
    fscanf(f, "%d%d%d", &n, &m, &s);

    for(int i=0; i<m; i++){
        fscanf(f, "%d%d", &nod, &vecin);
        graph[nod].push_back(vecin);
    }

    memset(distanta, -1, sizeof(distanta));

    BFS(s);

    for(int i=1; i<=n; i++){
        fprintf(g, "%d", distanta[i]);
        fprintf(g, "%c", ' ');
    }

    return 0;
}