Pagini recente » Cod sursa (job #601254) | Cod sursa (job #2442311) | Cod sursa (job #1946666) | Cod sursa (job #3233767) | Cod sursa (job #1277723)
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
FILE *fin, *fout;
#define NMAX 100005
struct step {
int node, dist;
};
int bfs (vector <vector<int> > &graf, int n, int startNode, int finishNode) {
queue<step> Q;
int nbs, node, i;
bool inQueue[NMAX];
memset(inQueue, 0, sizeof(bool) * NMAX);
step aux, aux2;
aux.node = startNode; aux.dist = 0;
Q.push(aux);
while (!Q.empty()) {
aux = Q.front(); Q.pop(); node = aux.node;
if (node == finishNode) return aux.dist;
nbs = graf[node].size();
for (i=0; i<nbs; ++i) {
if (!inQueue[graf[node][i]]) {
aux2.node = graf[node][i];
aux2.dist = aux.dist + 1;
Q.push(aux2);
inQueue[graf[node][i]] = 1;
}
}
}
return -1;
}
int main() {
fin = fopen ("bfs.in", "r"); fout = fopen ("bfs.out", "w");
int n, m, s, i, a, b;
fscanf (fin, "%d%d%d", &n, &m, &s);
vector <vector<int> > graf(n+1);
for (i=1; i<=m; ++i) {
fscanf (fin, "%d%d", &a, &b);
graf[a].push_back(b);
}
for (i=1; i<=n; ++i) {
fprintf (fout, "%d ", bfs(graf, n, s, i));
}
fclose(fin); fclose(fout);
return 0;
}