Pagini recente » Cod sursa (job #776069) | preONI 2007, Runda Finala, Clasa a 10-a | Cod sursa (job #2358085) | Cod sursa (job #1925856) | Cod sursa (job #1121176)
#include <iostream>
#include <fstream>
using namespace std;
const int inf=1<<30;
const int mmax=1000001;
const int nmax=100001;
ifstream in("bfs.in");
ofstream out("bfs.out");
struct lista
{ int v;
lista * urm;
};
lista *cap[nmax],*nou;
int coada[mmax],n,m,ns,d[nmax];
void bfs()
{ int pi=1,ps=1,i;
for(i=1;i<=n;i++)
d[i]=inf;
coada[ps]=ns;
d[ns]=0;
while(pi<=ps)
{ nou=cap[coada[pi]];
while(nou!=NULL)
{if(d[nou->v]>d[coada[pi]]+1){d[nou->v]=d[coada[pi]]+1;ps++;coada[ps]=nou->v;}
nou=nou->urm;
}
pi++;
}
}
int main()
{ in>>n>>m>>ns;
int i,a,b;
for(i=1;i<=m;i++)
{ in>>a>>b;
nou=new lista;
nou->v=b;
nou->urm=cap[a];
cap[a]=nou;
}
/* for(i=1;i<=n;i++)
{ out<<i<<" ";
nou=cap[i];
while(nou!=NULL)
{out<<nou->v<<" ";
nou=nou->urm;}out<<"\n";}*/
bfs();
for(i=1;i<=n;i++)
if(d[i]==inf)
out<<"-1 ";
else out<<d[i]<<" ";
return 0;
}