Pagini recente » Istoria paginii runda/masonerieee-pe-feliee/clasament | Istoria paginii utilizator/mariasfiraiala | Cod sursa (job #2285656) | Cod sursa (job #1173040) | Cod sursa (job #1339736)
#include <stdio.h>
#include <vector>
struct str
{
int nod;
int ct;
int tatnod;
}qu[100010];
bool vis[100010];
int val[100010];
int ps;
std::vector<int> *adj;
int n,m,s;
int pt;
void bfs(int act)
{
if(act==n) return;
std::vector<int>::iterator it;
for(it=adj[qu[act].nod].begin();it!=adj[qu[act].nod].end();++it)
{
if(*it!=qu[act].tatnod)
{
qu[ps].tatnod=qu[act].nod;
qu[ps].nod=*it;
qu[ps].ct=qu[act].ct+1;
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);
}
qu[0].tatnod=-1;
vis[s]=0;
ps=1;
qu[0].nod=s;
qu[0].ct=0;
bfs(0);
for(int i=1;i<ps;i++)
{
if(val[qu[i].nod]==0&&qu[i].nod!=s) val[qu[i].nod]=qu[i].ct;
}
for(int i=1;i<=n;i++)
{
if(val[i]==0&&i!=s) printf("-1 ");
else printf("%d ",val[i]);
}
}