Pagini recente » Cod sursa (job #3143186) | Cod sursa (job #383778) | Cod sursa (job #2973816) | Cod sursa (job #68595) | Cod sursa (job #228299)
Cod sursa(job #228299)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cassert>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <queue>
#include <map>
#include <bitset>
#include <algorithm>
#define oo 1<<29
#define mp make_pair
#define pb push_back
#define LL long long
#define FIN "bfs.in"
#define FOUT "bfs.out"
#define N 100001
using namespace std;
queue<pair<int,int> > Q;
vector<int> A[N];
pair<int,int> Now;
int dist[N],n,m,s;
int main(){
int i,a,b;
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d%d%d",&n,&m,&s);
while (m--){
scanf("%d%d",&a,&b);
A[a].pb(b);
}
Q.push(mp(s,0));
for (i = 1; i <= n; ++i)
dist[i] = -1;
while (!Q.empty()){
Now = Q.front(); Q.pop();
dist[Now.first] = Now.second;
for (i = 0; i < A[Now.first].size(); ++i)
if (dist[A[Now.first][i]] == -1){
Q.push(mp(A[Now.first][i],Now.second + 1));
dist[A[Now.first][i]] == Now.second + 1;
}
}
for (i = 1; i <= n; ++i)
printf("%d ",dist[i]);
}