Cod sursa(job #1023518)

Utilizator SeekHunt1334Septimiu Bodica SeekHunt1334 Data 7 noiembrie 2013 09:34:06
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <deque>
using namespace std;
#define DIM 100001

ifstream fin("bfs.in");
ofstream fout("bfs.out");

vector<deque<int> > G;
queue<int> Q;
vector<bool> D;
vector<int> Cost;
int n, m, S;

void Read();
void BFS(int node);
void WriteCost();

int main()
{
    Read();
    BFS(S);
    WriteCost();

    fin.close();
    fout.close();
    return 0;
}

void BFS(int node)
{
    Q.push(node);
    deque<int>::iterator it;
    while ( !Q.empty() )
    {
        int curr = Q.front();
        for (it = G[curr].begin(); it != G[curr].end(); ++it)
        {
            if ( D[*it] ) continue;
            D[*it] = true;
            Cost[*it] = Cost[curr] + 1;
            Q.push(*it);
        }
        Q.pop();
    }
}

void WriteCost()
{
    for (int i = 1; i <= n; ++i)
        fout << Cost[i] << ' ';
    fout << '\n';
}

void Read()
{
    fin >> n >> m >> S;
    int x, y;
    D.resize(n+1);
    Cost.resize(n+1);
    G.resize(n+1);
    for (int i = 0; i <= n; ++i)
        Cost[i] = -1;

    for (int i = 1; i <= m; ++i)
    {
        fin >> x >> y;
        if ( x == y )
            G[x].push_front(y);
        else
            G[x].push_back(y);
    }
}