Pagini recente » Cod sursa (job #392970) | Cod sursa (job #1799029) | Cod sursa (job #1136883) | Cod sursa (job #698823) | Cod sursa (job #2418689)
#include <iostream>
#include <queue>
#include <climits>
FILE * fin= fopen("bfs.in","r");
FILE * fout= fopen("bfs.out","w");
std::vector<int> v[100050];
int n, m,S;
long long minn[100050];
std::queue<int> q;
int main()
{
fscanf(fin,"%d %d %d",&n,&m,&S);
for(int i=0;i<m;i++)
{
int j,k;
fscanf(fin,"%d %d",&j,&k);
v[j].push_back(k);
}
for(int i=1;i<=n;i++)
minn[i]=LONG_LONG_MAX;
q.push(S);
minn[S]=0;
while(!q.empty())
{
int tp = q.front();
q.pop();
for(int i=0;i<v[tp].size();i++)
{
int elem = v[tp][i];
if(minn[elem]> minn[tp]+1)
{
minn[elem]=minn[tp]+1;
q.push(elem);
}
}
}
for(int i=1;i<=n;i++)
{
if(i==S)
fprintf(fout,"0 ");
else if(minn[i]!= LONG_LONG_MAX)
fprintf(fout,"%lld ",minn[i]);
else
fprintf(fout,"-1 ");
}
}