Pagini recente » Cod sursa (job #1640022) | Cod sursa (job #2853406) | Cod sursa (job #1493098) | Cod sursa (job #2715878) | Cod sursa (job #662229)
Cod sursa(job #662229)
#include<iostream>
#include<fstream>
#define lmax 1000000
#define nmax 100000
#define INFINIT 0x3f3f3f
using namespace std;
ifstream f("bfs.in",fstream::in);
ofstream g("bfs.out",fstream::out);
bool viz[nmax];
long cost[nmax];
struct nod
{int inf;
nod *urm;
};
typedef int coada[lmax];
coada c;
nod *L[lmax];
unsigned int n,m,sursa;
void add(int x,int y)
{nod *nou;
nou=new nod;
nou->inf=x;
nou->urm=L[y];
L[y]=nou;
}
void show_noduri()
{short int i;
nod *p;
for(i=1;i<=n;i++)
{ cout<<i<<" ";
for(p=L[i];p;p=p->urm)
cout<<p->inf<<" ";
cout<<"\n";
}
}
void citire()
{f>>n>>m>>sursa;
unsigned int x,y;
for(unsigned int i=1;i<=m;i++)
{f>>x>>y;
add(y,x);
}
}
void BFS()
{unsigned int incc,sfc;
unsigned int x,i;
x=sursa;
incc=sfc=1;
c[incc]=x;
for(i=1;i<=n;i++)
if(i!=sursa)
cost[i]=INFINIT;
while(incc<=sfc)
{x=c[incc++];
for(nod *p=L[x];p;p=p->urm)
if(!viz[p->inf])
{viz[p->inf]=1;
c[++sfc]=p->inf;
if(cost[x]+1<cost[p->inf])
cost[p->inf]=cost[x]+1;
}
}
}
void show_costuri()
{unsigned int i;
for(i=1;i<=n;i++)
if(cost[i]==INFINIT)
g<<"-1 ";
else g<<cost[i]<<" ";
}
int main()
{citire();
// show_noduri();
BFS();
show_costuri();
f.close();
g.close();
return 0;
}