Pagini recente » Cod sursa (job #3229080) | Cod sursa (job #1580567) | Cod sursa (job #1694465) | Cod sursa (job #2180015) | Cod sursa (job #2662571)
#include <bits/stdc++.h>
#define NMAX 100005
#define INF 2000000000
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
vector < int > nod[NMAX];
queue < int > q;
int n, m, s, x, y, drum[NMAX];
bool visited[NMAX];
void citire(){
fin>>n>>m>>s;
for(int i = 1; i <= m; ++i){
fin>>x>>y;
nod[x].push_back(y);
}
for(int i = 1; i <= n; ++i)
drum[i] = INF;
drum[s] = 0;
}
void bfs(){
q.push(s);
visited[s] = 1;
while(!q.empty()){
int node = q.front();
q.pop();
for(int j = 0; j < nod[node].size(); ++j){
if(drum[nod[node][j]] > drum[node] + 1){
drum[nod[node][j]] = drum[node] + 1;
if(!visited[nod[node][j]]){
q.push(nod[node][j]);
visited[nod[node][j]] = 1;
}
}
}
}
}
int main(){
citire();
bfs();
for(int i = 1; i <= n; ++i){
if(drum[i] == INF)
drum[i] = -1;
fout<<drum[i]<<' ';
}
return 0;
}