Pagini recente » Borderou de evaluare (job #2777881) | Borderou de evaluare (job #2247802) | Cod sursa (job #614308) | Cod sursa (job #1416793) | Cod sursa (job #2518999)
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
FILE *fin = fopen("bfs.in", "r");
FILE *fout = fopen("bfs.out", "w");
vector <vector <int> > vf;
queue <int> q;
int n,m,s,i,dist[100005],x,y,elem;
int main()
{
fscanf(fin, "%d%d%d", &n,&m,&s);
vf.resize(n+1);
for(i=1; i<=m; ++i)
{
fscanf(fin, "%d%d", &x,&y);
vf[x].push_back(y);
}
for(i=1; i<=n; ++i)
dist[i] = -1;
q.push(s);
dist[s] = 0;
while(!q.empty())
{
elem = q.front();
for(i=0; i<vf[elem].size(); ++i)
if(dist[vf[elem][i]] == -1)
{
dist[vf[elem][i]] = dist[elem]+1;
q.push(vf[elem][i]);
}
q.pop();
}
for(i=1; i<=n; ++i)
fprintf(fout, "%d ", dist[i]);
fclose(fin);
fclose(fout);
return 0;
}