Cod sursa(job #2096754)

Utilizator stefanpiturStefan Alexandru Pitur stefanpitur Data 29 decembrie 2017 18:21:09
Problema BFS - Parcurgere in latime Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
FILE *fin, *fout;
int n,m,s;
vector<int>graph[100001];
int d[100001],viz[100001];
void citire(){
    fin=fopen("bfs.in","r");
    fout=fopen("bfs.out","w");
    fscanf(fin,"%d %d %d\n",&n,&m,&s);
    int a,b;
    for(int i=0;i<m;i++){
        fscanf(fin,"%d %d\n",&a,&b);
        graph[a].push_back(b);
    }
    fclose(fin);
}
void bfs(int x){
    viz[x]=1;
    for(int j=0;j<graph[x].size();j++)
        if(viz[graph[x][j]]==0)
            d[graph[x][j]]=d[x]+1;
    for(int j=0;j<graph[x].size();j++)
        if(viz[graph[x][j]]==0)
            bfs(graph[x][j]);
}
void rezolva(){
    d[s]=0;
    bfs(s);
}
void afisare(){
    for(int i=1;i<=n;i++){
        if(d[i]==0){
            if(i==s)
                fprintf(fout,"0 ");
            else
                fprintf(fout,"-1 ");
        }
        else
            fprintf(fout,"%d ",d[i]);
    }
    fclose(fout);
}
int main()
{
    citire();
    rezolva();
    afisare();
    return 0;
}