Cod sursa(job #2429482)

Utilizator patrickdanDan patrick patrickdan Data 9 iunie 2019 19:32:45
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include<vector>
using namespace std;

vector <int> G[100001];
vector <int> q;
int cost[100001];
bool viz[100001];
int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    int n,m,s,orig,dest,last,i;
    scanf("%d%d%d",&n,&m,&s);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&orig,&dest);
        G[orig].push_back(dest);
    }
    q.push_back(s);
    viz[s]=1;
    while(q.empty()==0)
    {
    int last=q[0];
    for(i=0;i<q.size()-1;i++)
        q[i]=q[i+1];
    q.pop_back();
    for(i=G[last].size()-1;i>=0;i--){
        if(viz[G[last][i]]==0){
            q.push_back(G[last][i]);
            cost[G[last][i]]=cost[last]+1;
            viz[G[last][i]]=1;
        }
        G[last].pop_back();
    }
    }
    for(i=1;i<=n;i++){
        if(cost[i]!=0 || i==s)
            printf("%d ",cost[i]);
        else
            printf("-1 ");
    }
    return 0;
}