Pagini recente » Cod sursa (job #1725115) | Cod sursa (job #934945) | Cod sursa (job #2794281) | Cod sursa (job #2011704) | Cod sursa (job #2594670)
#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, list<int> graphList[], FILE *fout) {
queue<int> q;
int dist[MAX_NODE_COUNT], vizitat[MAX_NODE_COUNT];
memset(dist, -1, 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();
list<int>::iterator it;
for (it = graphList[nod].begin(); it != graphList[nod].end(); it++) {
if (vizitat[*it] == 0) {
q.push(*it);
vizitat[*it] = 1;
dist[*it] = dist[nod] + 1;
}
}
q.pop();
}
for (int i = 1; i <= n; i++) {
fprintf(fout, "%d ", dist[i]);
}
}
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);
list<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);
}
// list<int>::iterator it;
// for (int i = 1; i <= n; i++) {
// fprintf(fout, "%d: ", i);
// for (it = graphList[i].begin(); it != graphList[i].end(); it++) {
// fprintf(fout, "%d ", *it);
// }
// fprintf(fout, "\n");
// }
bfs(src, n, graphList, fout);
fclose(fin);
fclose(fout);
return 0;
}