Pagini recente » Cod sursa (job #1492493) | Cod sursa (job #2715552) | Cod sursa (job #2426997) | Cod sursa (job #2439794) | Cod sursa (job #1770593)
#include <cstdio>
#include <queue>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std;
FILE *fin=fopen("bfs.in","r"),*fout=fopen("bfs.out","w");
int m,n,p,dist[100002];
vector <int> muci[100002];
void fctzie(queue <int> ver,int level)
{
int x;
queue <int> never;
while(!ver.empty())
{
x=ver.front();
ver.pop();
vector <int>::iterator ii;
for(ii=muci[x].begin();ii!=muci[x].end();++ii)
{
if(-1==dist[*ii])
never.push(*ii),
dist[*ii]=level;
}
}
if(!never.empty())fctzie(never,level+1);
return;
}
int main()
{
fscanf(fin, "%d%d%d",&n,&m,&p);
int a,b;
memset (dist,-1,sizeof(dist));
for(int i=0;i<m;++i)
{
fscanf(fin,"%d%d",&a,&b);
muci[a].push_back(b);
}
queue <int> q;
q.push(p);dist[p]=0;
fctzie(q,1);
for(int i=1;i<=n;++i)fprintf(fout,"%d\n",dist[i]);
return 0;
}