Pagini recente » Istoria paginii utilizator/vladiana | Cod sursa (job #271432) | Cod sursa (job #1539805) | Cod sursa (job #2912201) | Cod sursa (job #2827640)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
int start[100001],t[2][2000002],viz[100001],coada[100001],prim=1,ultim=1,n,m,s,k;
int dir[100001]={-1};
void bfs(int nod)
{
int p,contor=1;
coada[prim]=nod;
viz[nod]=1;
while(prim<=ultim)
{
p=start[coada[prim]];
while(p)
{
if(viz[t[0][p]]==0)
{
dir[t[0][p]]=contor;
ultim++;
coada[ultim]=t[0][p];
viz[t[0][p]]=1;
}
p=t[1][p];
}
contor++;
prim++;
}
}
int main()
{
f>>n>>m>>s;
int o,i,j;
for(o=1;o<=m;o++)
{
f>>i>>j;
k++;
t[0][k]=j;
t[1][k]=start[i];
start[i]=k;
}
dir[s]=0;
bfs(s);
for(o=1;o<=n;o++)
{
if(dir[o]==0&&o!=s) g<<"-1"<<" ";
else
g<<dir[o]<<" ";
}
return 0;
}