Pagini recente » Cod sursa (job #2711600) | Cod sursa (job #3039325) | Cod sursa (job #1052245) | Cod sursa (job #2723451) | Cod sursa (job #2786850)
#include <bits/stdc++.h>
using namespace std;
ifstream in("graf.in");
ofstream out("graf.out");
vector <int> v[100005];
int s,y,m,n,x;
void citire(vector<int> v[100005], int& n, int& m){
in >> n >> m >> s;
for(int i = 1; i <= m; ++i){
in >> x >> y;
v[x].push_back(y);
//v[y].push_back(x);
}
}
void afisare(vector<int> v[100005]){
for(int i = 1; i <= n; ++i)
{ cout << "Vecinii lui " << i << " sunt: ";
for(auto x:v[i]){
cout << x << " ";
}
cout << endl;}
}
int viz[100005];
void dfs(int i){
viz[i] = 1;
cout << i << " ";
for(auto x: v[i]){
if(!viz[x]){
viz[x] = 1;
dfs(x);
}
}
}
int d[100005];
void bfs(int x){
queue <int> c;
c.push(x);
viz[x] = 1;
for(int i = 1; i <= n; ++i)
d[i] = -1;
d[x] = 0;
while(c.size()){
for(auto val : v[c.front()])
if(viz[val] == 0 ){
d[val] = d[c.front()] + 1;
viz[val] = 1;
c.push(val);
}
c.pop();
}
}
int main() {
citire(v,n,m);
// afisare(v);
// dfs(1);
bfs(s);
for(int i = 1; i <= n; ++i)
out << d[i] << " ";
return 0;
}