Pagini recente » Cod sursa (job #2501321) | Cod sursa (job #2705153) | Cod sursa (job #521052) | Istoria paginii runda/eusebiu_oji_2014_cls9 | Cod sursa (job #2424448)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
int n, M, S, x, y;
vector <vector <int> > a;
vector <int> dist;
queue <int> q;
void BFS(int sursa)
{
dist[sursa] = 1;
q.push(sursa);
while(!q.empty())
{
int node = q.front();
for(unsigned int i = 0; i < a[node].size(); i ++)
{
int u = a[node][i];
if (dist[u] == 0)
{
dist[u] = dist[node] + 1;
q.push(u);
}
}
q.pop();
}
for(int i = 1; i <= n; i++)
if(dist[i] == 0 && i == sursa)
out << "0\t";
else
out << dist[i] - 1 << "\t";
}
void add_edge(int i, int j)
{
a[i].push_back(j);
//a[j].push_back(i);
}
int main()
{
in>>n;
in>>M;
in>>S;
a = vector <vector<int> > (n+1);
for(int i = 0; i < n+1; i++)
{
dist.push_back(0);
}
for(int i=1;i<=M;i++){
in >> x >> y;
add_edge(x, y);
}
BFS(S);
return 0;
}