Pagini recente » Sandbox (cutiuţa cu năsip) | tema | Cod sursa (job #1705365) | Istoria paginii runda/jjjj | Cod sursa (job #1705317)
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
#include <string.h>
void bfs(int s, int dist[], std::vector<int> g[], int n) {
std::queue<int> q;
bool visited[n + 1];
memset(visited, false, sizeof(bool) * (n + 1));
q.push(s);
visited[s] = true;
while (!q.empty()) {
int node = q.front();
q.pop();
for (unsigned int i = 0; i < g[node].size(); i++) {
if (!visited[g[node][i]]) {
visited[g[node][i]] = true;
q.push(g[node][i]);
dist[g[node][i]] = dist[node] + 1;
}
}
}
}
int main() {
int n, m, s, x, y;
FILE* fin = fopen("bfs.in", "r");
FILE* fout = fopen("bfs.out", "w");
fscanf(fin, "%d %d %d", &n, &m, &s);
std::vector<int> graf[n + 1];
int dist[n + 1];
memset(dist, 0, sizeof(int) * (n + 1));
for (int i = 1; i <= m; i++) {
fscanf(fin, "%d %d", &x, &y);
graf[x].push_back(y);
}
fclose(fin);
bfs(s, dist, graf, n);
for (int i = 1; i <= n; i++) {
if (dist[i] == 0 && i != s) {
dist[i] = -1;
}
fprintf(fout, "%d ", dist[i]);
}
fclose(fout);
return 0;
}