Cod sursa(job #1905728)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 6 martie 2017 10:33:11
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

queue<int> q;
vector<int> adj[100010];
int dist[100010];

int n,m,s;

void bfs(int nod)
{
    for(vector<int>::iterator it=adj[nod].begin();it!=adj[nod].end();it++)
    {
        if(dist[*it]==0&&*it!=nod)
        {
            dist[*it]=dist[nod]+1;
            q.push(*it);
            //printf("%d %d %d\n",q.front(),*it,dist[*it]);
        }
    }
    if(!q.empty())
    {
        int next=q.front();
        q.pop();
        bfs(next);
    }
}

int main()
{
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);

    scanf("%d %d %d",&n,&m,&s);

    int x,y;
    for(int i=1;i<=m;i++)
    {
        scanf("%d %d",&x,&y);
        adj[x].push_back(y);
    }
    bfs(s);
    for(int i=1;i<=n;i++)
    {
        if(dist[i]==0)
        {
            dist[i]=-1;
        }
        if(i==s)
        {
            dist[i]=0;
        }
        printf("%d ",dist[i]);
    }
}