Pagini recente » Cod sursa (job #2859198) | Cod sursa (job #427706) | Cod sursa (job #264176) | Cod sursa (job #2962270) | Cod sursa (job #526899)
Cod sursa(job #526899)
#include<cstdio>
#include<queue>
using namespace std;
struct list {
int neigh;
list *next;
};
list *listad[100001];
bool viz[100001];
int dist[100001];
int N, M, S;
void readData() {
scanf("%d %d %d", &N, &M, &S);
int x, y;
for (int i = 0; i < M; i++) {
scanf("%d %d ", &x, &y);
list *aux = new list;
aux->neigh = y;
aux->next = listad[x];
listad[x] = aux;
}
}
void bfs(int source){
queue<int> neigh;
viz[source] = 1;
dist[source] = 0;
neigh.push(source);
int current;
list *aux;
while (!neigh.empty()){
current = neigh.front();
neigh.pop();
aux = listad[current];
while (aux) {
if (!viz[aux->neigh]) {
viz[aux->neigh] = 1;
dist[aux->neigh] = dist[current] + 1;
neigh.push(aux->neigh);
}
aux = aux->next;
}
}
}
int main() {
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
readData();
bfs(S);
for (int i = 1; i <= N; i++) {
if (viz[i]) {
printf("%d ",dist[i]);
}
else printf("-1 ");
}
printf("\n");
return 0;
}