Cod sursa(job #1443548)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 28 mai 2015 08:16:33
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;

const int Nm = 100005;
vector <int> G[Nm];
int N,M,S,Nr,Sol[Nm],Q[Nm];

void Read()
{
    int a,b;
    freopen("bfs.in","r",stdin);
    scanf("%d %d %d",&N,&M,&S);

    for (int i = 1;i <= M;i++)
    {
        scanf("%d %d",&a,&b);
        G[a].push_back(b);
    }
}

void BFS(int X)
{
    memset(Sol,-1,sizeof(Sol));
    Nr = 1;
    Sol[X] = 0;
    Q[1] = X;
    vector<int>::iterator j;

    for (int i = 1;i <= Nr;i++)
    {
        for (j = G[Q[i]].begin();j != G[Q[i]].end();j++)
        if (Sol[*j] == -1)
        {
            Q[++Nr] = *j;
            Sol[Q[Nr]] = Sol[Q[i]] + 1;
        }
    }
}

void Write()
{
    freopen("bfs.out","w",stdout);
    for (int i = 1;i <= N;i++)
        printf("%d ",Sol[i]);

    printf("\n");
}

int main()
{
     Read();
     BFS(S);
     Write();
    return 0;
}