Pagini recente » Cod sursa (job #2354527) | Cod sursa (job #29696) | Cod sursa (job #2813191) | Cod sursa (job #228955) | Cod sursa (job #1981907)
#include <iostream>
#include <stdio.h>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX=100005;
vector <int> G[NMAX];
int viz[NMAX], d[NMAX], t[NMAX];
FILE *fin, *fout;
void bfs(int u, int cc)
{
int j;
queue <int> q;
viz[u]=cc;
q.push(u);
while(!q.empty())
{
u=q.front();
for(j=0; j<G[u].size(); j++)
{
int v=G[u][j];
if(!viz[v])
{
viz[v]=cc;
t[v]=u;
d[v]=d[u]+1;
q.push(v);
}
}
//fprintf(fout, "%d ", u);
q.pop();
}
}
int main()
{
int u,v,i,cc=1,n,m,x;
fin=fopen("bfs.in", "r");
fout=fopen("bfs.out", "w");
fscanf(fin, "%d%d%d", &n, &m, &x);
for(i=1; i<=m; i++)
{
fscanf(fin, "%d%d", &u, &v);
G[u].push_back(v);
//G[v].push_back(u);
}
for(i=1; i<=n; i++)
sort(G[i].begin(), G[i].end());
bfs(x, cc);
for(i=1; i<=n; i++)
{
if(viz[i]==0) d[i]=-1;
fprintf(fout, "%d ", d[i]);
}
return 0;
}