Pagini recente » Istoria paginii utilizator/ysaika2 | Cod sursa (job #2277151) | Cod sursa (job #781663) | Cod sursa (job #1294887) | Cod sursa (job #1339740)
#include <stdio.h>
#include <vector>
struct str
{
int nod;
int ct;
int tatnod;
}qu[400010];
int val[100010];
int ps;
std::vector<int> *adj;
int n,m,s;
int pt;
void bfs(int act)
{
if(act==ps) return;
std::vector<int>::iterator it;
for(it=adj[qu[act].nod].begin();it!=adj[qu[act].nod].end();++it)
{
if(val[*it]==-1)
{
qu[ps].tatnod=qu[act].nod;
qu[ps].nod=*it;
qu[ps].ct=qu[act].ct+1;
val[*it]=qu[ps].ct;
ps++;
}
}
bfs(act+1);
return ;
}
int main()
{
freopen ("bfs.in","r",stdin);
freopen ("bfs.out","w",stdout);
scanf("%d%d%d",&n,&m,&s);
int p1,p2;
adj=new std::vector<int>[n+1];
for(int i=1;i<=m;i++)
{
scanf("%d%d",&p1,&p2);
adj[p1].push_back(p2);
}
for(int i=1;i<=n;i++) val[i]=-1;
qu[0].tatnod=-1;
ps=1;
qu[0].nod=s;
qu[0].ct=0;
bfs(0);
val[s]=0;
for(int i=1;i<=n;i++)
{
printf("%d ",val[i]);
}
}