Pagini recente » Cod sursa (job #517700) | Cod sursa (job #1375653) | Cod sursa (job #1142613) | Cod sursa (job #1951782) | Cod sursa (job #1842090)
#include <iostream>
#include <bits/stdc++.h>
#define NMAX 100005
#define MAXIM 2000000
using namespace std;
vector <int> lista[NMAX];
int n, m, dist[NMAX];
void BFS(int nod){
int k = 0, viz[NMAX], i, S, len, q[NMAX];
for(i = 1;i <= n; ++i){
viz[i] = 0;
dist[i] = MAXIM;
}
++k;
S = nod;
q[1] = S;
dist[S] = 0;
while(k){
S = q[k];
--k;
viz[S] = 1;
len = lista[S].size();
for(i = 0;i < len; ++i){
if(viz[lista[S][i]] == 0){
++k;
q[k] = lista[S][i];
viz[lista[S][i]] = 1;
dist[lista[S][i]] = min(dist[lista[S][i]],dist[S] + 1);
}
}
}
}
int main(){
FILE *f, *g;
f = fopen("bfs.in","r");
g = fopen("bfs.out","w");
int i, s, x, y;
fscanf(f,"%d %d %d",&n,&m,&s);
for(i = 1;i <= m; ++i){
fscanf(f,"%d %d",&x,&y);
lista[x].push_back(y);
}
BFS(s);
for(i = 1;i <= n; ++i)
if(dist[i] == MAXIM)
fprintf(g,"-1 ");
else
fprintf(g,"%d ",dist[i]);
}