Pagini recente » Cod sursa (job #1679246) | Cod sursa (job #2517664) | Cod sursa (job #1820312) | Cod sursa (job #2781364) | Cod sursa (job #1681929)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("bfs.in" );
ofstream g("bfs.out");
int NrNoduri, NrMuchii, start, x, y;
vector<int> vecini[100001];
bool visit[100001];
int distanta[100001];
void BFS(int A) {
queue<int> coada;
coada.push( A );
visit[A] = 1;
while ( !coada.empty() ) {
for ( vector<int>::iterator it=vecini[coada.front()].begin() ; it!=vecini[coada.front()].end() ; it++ )
if ( !visit[*it] ) {
coada.push(*it);
visit[*it] = 1;
distanta[*it] = distanta[coada.front()] + 1;
}
coada.pop();
}
}
int main() {
f >> NrNoduri >> NrMuchii >> start;
for ( int i=1 ; i<=NrMuchii ; i++ ) {
f >> x >> y;
vecini[x].push_back(y);
}
BFS(start);
for ( int i=1 ; i<=NrNoduri ; i++ )
{
if ( !distanta[i] && i!=start ) distanta[i] = -1;
g << distanta[i] << ' ';
}
}