Pagini recente » Cod sursa (job #1374150) | Cod sursa (job #712547) | Cod sursa (job #151268) | Cod sursa (job #1284253) | Cod sursa (job #1333211)
#include <cstdio>
#include <vector>
#define DMAX 100001
using namespace std;
FILE * fin=fopen("bfs.in", "r");
FILE * fout=fopen("bfs.out", "w");
int n, m, s;
vector<int>L[DMAX];
bool viz[DMAX];
int Q[DMAX];
int dist[DMAX];
void citire();
void BFS(int vf);
void afisare();
int main()
{
citire();
BFS(s);
afisare();
return 0;
}
void BFS(int vf)
{
int prim, ultim, i, x;
viz[vf]=1; ultim=prim=0;
Q[0]=vf;
while (prim<=ultim)
{
x=Q[prim++];
for (i=0; i<L[x].size(); ++i)
if (!viz[L[x][i]])
{
dist[L[x][i]]=dist[x]+1;
viz[L[x][i]]=1;
Q[++ultim]=L[x][i];
}
}
}
void afisare()
{
int i;
for (i=1; i<=n; ++i)
if (viz[i])
fprintf(fout, "%d ", dist[i]);
else fprintf(fout, "-1 ");
fprintf(fout, "\n");
fclose(fout);
}
void citire()
{
int i, x, y;
fscanf(fin, "%d %d %d", &n, &m, &s);
for (i=1; i<=m; ++i)
{
fscanf(fin, "%d %d", &x, &y);
L[x].push_back(y);
}
}