Cod sursa(job #797245)

Utilizator TeodoraTanaseTeodora Tanase TeodoraTanase Data 13 octombrie 2012 17:29:22
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <vector>
#include <queue>

#define NMAX 100001

using namespace std;

FILE *inFile = fopen ("bfs.in", "r");
FILE *outFile = fopen ("bfs.out", "w");

vector <int> G[NMAX];
queue < pair <int, int> > Q;

int n;
int s;
int res[NMAX];

void read()
{
    int m;
    int x;
    int y;

    fscanf (inFile, "%d %d %d\n", &n, &m, &s);

    while (m --)
    {
        fscanf (inFile, "%d %d\n", &x, &y);
        G[x].push_back(y);
    }
}

void bfs()
{
    Q.push(make_pair(s, 0));

    while (!Q.empty())
    {
        pair <int, int> aux = Q.front();

        for (unsigned int j = 0; j < G[aux.first].size(); ++ j)
        {
            int v = G[aux.first][j];

            if (res[v] == 0 && v != s)
            {
                res[v] = 1 + aux.second;
                Q.push(make_pair(v, 1 + aux.second));
            }
        }

        Q.pop();
    }
}

void print()
{
    for (int i = 1; i <= n; ++ i)
        if (res[i] == 0 && i != s)
            fprintf (outFile, "-1 ");
        else
            fprintf (outFile, "%d ", res[i]);

    fprintf (outFile, "\n");
}

int main()
{
    read();
    bfs();
    print();

    return 0;
}