Pagini recente » Cod sursa (job #971873) | Cod sursa (job #1743558) | Cod sursa (job #2816683) | Cod sursa (job #1224717) | Cod sursa (job #474400)
Cod sursa(job #474400)
#include<fstream>
#include<queue>
#include<list>
#define NMAX 100005
using namespace std;
typedef list<int>::iterator ITL;
struct bf
{ int nod;int dist;};
list<int> a[NMAX];
queue<bf> q;
int n,m,x,y,nod,viz[NMAX],i,d[NMAX];
void BFS()
{
bf z,t;
ITL it;
z.nod=nod;
viz[nod]=1;
z.dist=0;
q.push(z);
while (q.empty()==false)
{
z=q.front();
q.pop();
for(it=a[z.nod].begin();it!=a[z.nod].end();it++)
if (viz[*it]==0)
{
t.nod=*it;
t.dist=z.dist+1;
q.push(t);
d[*it]=t.dist;
viz[*it]=1;
}
}
}
int main()
{
ifstream f("bfs.in");
ofstream g("bfs.out");
f>>n>>m>>nod;
for (i=1;i<=m;i++)
{
f>>x>>y;
a[x].push_back(y);
}
BFS();
if (d[1]!=0) g<<d[1];
else if (1==nod) g<<0;
else g<<"-1";
for (i=2;i<=n;i++)
if (d[i]!=0) g<<" "<<d[i];
else if (i==nod) g<<" "<<0;
else g<<" -1";
g<<"\n";
f.close();
g.close();
return 0;
}