Cod sursa(job #2469455)

Utilizator bogdan_modoleaBogdan Modolea bogdan_modolea Data 7 octombrie 2019 12:39:38
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;

string text="bfs";

ifstream fin(text+".in");
ofstream fout(text+".out");
typedef long long ll;

int n,m,s;
int a[NMAX/10][NMAX/10];
int vizitat[NMAX],distanta[NMAX];
int c[NMAX];

void bfs(int x){
    int p,u,i;
    p=u=1;
    c[1]=x; vizitat[x]=1; distanta[x]=0;
    while(p<=u){
        x=c[p++];
        for(i=1;i<=n;i++){
            if(a[x][i]){
                if(!vizitat[i]){
                    vizitat[i]=1;
                    distanta[i]=distanta[x]+1;
                    c[++u]=i;
                }
                else{
                    if(distanta[i]>distanta[x]+1) distanta[i]=distanta[x]+1, c[++u]=i;
                }
            }
        }
    }
}

int main()
{
    int i,x,y;
    fin>>n>>m>>s;
    for(i=1;i<=m;i++){
        fin>>x>>y;
        a[x][y]=1;
    }
    bfs(s);
    for(i=1;i<=n;i++){
        if(vizitat[i]) fout<<distanta[i]<<" ";
        else fout<<"-1 ";
    }
    return 0;
}