Pagini recente » Cod sursa (job #1813689) | Cod sursa (job #2453522) | Cod sursa (job #2558965) | Cod sursa (job #1939501) | Cod sursa (job #2594697)
#include <stdio.h>
#include <list>
#include <queue>
#include <array>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define MAX_NODE_COUNT 100005
void bfs(int src, int n, vector<int> graphList[], FILE *fout) {
queue<int> q;
int vizitat[MAX_NODE_COUNT], dist[MAX_NODE_COUNT];
memset(vizitat, 0, MAX_NODE_COUNT);
q.push(src);
vizitat[src] = 1;
dist[src] = 0;
while (!q.empty()) {
int nod = q.front();
for (int j = 0; j < graphList[nod].size(); j++) {
int u = graphList[nod][j];
if (vizitat[u] == 0) {
vizitat[u] = 1;
dist[u] = dist[nod] + 1;
q.push(u);
}
}
q.pop();
}
for (int i = 1; i <= n; i++) {
if (vizitat[i] == 0) fprintf(fout, "-1 ");
else
fprintf(fout, "%d ", dist[i]);
}
return;
}
int main() {
FILE *fin, *fout;
fin = fopen("bfs.in", "rt");
fout = fopen("bfs.out", "wt");
int n, m, src;
fscanf(fin, "%d%d%d", &n, &m, &src);
vector<int> graphList[MAX_NODE_COUNT];
int x, y;
for (int i = 0; i < m; i++) {
fscanf(fin, "%d%d", &x, &y);
graphList[x].push_back(y);
}
bfs(src, n, graphList, fout);
fclose(fin);
fclose(fout);
return 0;
}