Pagini recente » Cod sursa (job #2825133) | oji_go_11_12_2 | Cod sursa (job #2998558) | Cod sursa (job #2117272) | Cod sursa (job #1604379)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
#define MAXL 100010
int n,m,nr,l,start;
int dim[MAXL],dis[MAXL];
vector<int> v[MAXL];
int s[MAXL];
void bfs(int nod)
{
int i,j;
for(int i = 1; i <= n; ++i)
dis[i] = -1;
// initializare stiva
l = 1;
dis[nod] = 0;
s[l] = nod;
for(i = 1; i <= l; i++)
{
// folosesc fiecare element din stiva
for(j = 0; j < dim[s[i]]; j++)
{
if(dis[v[s[i]][j]] == -1){
// analizez vecinii
s[++l] = v[s[i]][j]; // ii pun in stiva prin marirea lui ,,l"
dis[s[l]] = dis[s[i]] + 1; // calculez distanta
}
}
}
}
int main()
{
in >> n >> m >> start;
int x,y;
for(int i = 1; i <= m ; ++i){
in >> x >> y;
v[x].push_back(y);
}
for(int i = 1; i <= n; ++i)
dim[i] = v[i].size();
bfs(start);
for(int i = 1; i <= n; ++i)
out << dis[i] << " ";
return 0;
}