Cod sursa(job #668180)

Utilizator feelshiftFeelshift feelshift Data 24 ianuarie 2012 15:18:11
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
// http://infoarena.ro/problema/bfs
#include <fstream>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;

#define MAXSIZE 100001

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

int nodes,edges,source;
int dist[MAXSIZE];
queue<int> list;
vector<int> graph[MAXSIZE];

void breadthFirst(int startNode);

int main()
{
    in >> nodes >> edges >> source;

    int from,to;
    for(int i=1;i<=edges;i++)
    {
        in >> from >> to;
        graph[from].push_back(to);
    }
    in.close();

    breadthFirst(source);

    for(int i=1;i<=nodes;i++)
        if(dist[i] == 0 && i != source)
            out << "-1 ";
        else
            out << dist[i] << " ";
    out << "\n";

    out.close();

    return (0);
}

void breadthFirst(int startNode)
{
    int currentNode;
    vector<int>::iterator end;
    list.push(startNode);

    while(!list.empty())
    {
        currentNode = list.front();
        list.pop();

        end = graph[currentNode].end();
        for(vector<int>::iterator it=graph[currentNode].begin();it!=end;++it)
            if(!dist[*it] && source != *it)
            {
                list.push(*it);
                dist[*it] = dist[currentNode] + 1;
            }
    }
}