Pagini recente » Cod sursa (job #706042) | Cod sursa (job #472457) | Cod sursa (job #2564544) | Cod sursa (job #1025562) | Cod sursa (job #1544603)
/*
http://www.infoarena.ro/problema/bfs
*/
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
int N, M, S, dist[100001];
vector<int> L[100001];
bool viz[100001];
void read()
{
int i, x, y;
ifstream fin("bfs.in");
fin >> N >> M >> S;
for (i = 0; i < M; ++i)
{
fin >> x >> y;
L[x].push_back(y);
}
fin.close();
}
void setupDistArray()
{
for (int i = 1; i <= N; ++i)
dist[i] = -1;
}
void BFS(int start)
{
setupDistArray();
queue<int> queue;
queue.push(start);
viz[start] = true;
dist[start] = 0;
while (!queue.empty())
{
int node = queue.front();
queue.pop();
vector<int>::iterator it;
for (it = L[node].begin(); it != L[node].end(); ++it)
{
if (!viz[*it])
{
viz[*it] = true;
dist[*it] = dist[node] + 1;
queue.push(*it);
}
}
}
}
void write()
{
ofstream fout("bfs.out");
for (int i = 1; i <= N; ++i)
fout << dist[i] << " ";
fout << "\n";
fout.close();
}
int main()
{
read();
BFS(S);
write();
return 0;
}