Pagini recente » Cod sursa (job #2198717) | Cod sursa (job #707857) | Cod sursa (job #979786) | Cod sursa (job #2742654) | Cod sursa (job #2262757)
#include <stdio.h>
#include <stdbool.h>
#define MAX_NODES 100001
#define MAX_EDGES 1000001
struct edge_t {
int id;
int next;
} edges[MAX_EDGES];
int graph[MAX_NODES], dis[MAX_NODES], edgIt = 1;
void add_edge(int x, int y)
{
struct edge_t edge = {y, graph[x]};
edges[edgIt] = edge;
graph[x] = edgIt++;
}
void bfs(int start)
{
int q[MAX_NODES], q_push = 0, q_pop = 0, local_dis;
bool vis[MAX_NODES] = {0};
q[q_push++] = start;
vis[start] = true;
dis[start] = 0;
local_dis = 1;
while (q_pop < q_push) {
int node = q[q_pop++];
struct edge_t edge = edges[graph[node]];
while (edge.id) {
if (!vis[edge.id]) {
q[q_push++] = edge.id;
vis[edge.id] = true;
dis[edge.id] = dis[node] + 1;
}
edge = edges[edge.next];
}
}
}
int main()
{
int n, m, s;
freopen("bfs.in", "r", stdin);
freopen("bfs.out", "w", stdout);
scanf("%d %d %d", &n, &m, &s);
while (m--) {
int x, y;
scanf("%d %d", &x, &y);
add_edge(x, y);
}
for (int i = 1; i <= n; i++)
dis[i] = -1;
bfs(s);
for (int i = 1; i <= n; i++)
printf("%d ", dis[i]);
return 0;
}