Pagini recente » Cod sursa (job #1042070) | Cod sursa (job #1142671) | Cod sursa (job #1091842) | Cod sursa (job #846115) | Cod sursa (job #2167936)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
struct nod
{
int x;
struct nod* urm;
};
typedef struct nod* LSI;
LSI lista[NMAX];
bool uz[NMAX];
int n, m, start, i, drum[NMAX];
void citire();
void dfs(int);
void bfs(int);
void inserare(LSI& lista, int x);
int main()
{
citire();
bfs(start);
for(i=1; i<=n; i++)
if(drum[i]==0 && i!=start)
fout<<-1<<' ';
else
fout<<drum[i]<<' ';
return 0;
}
void citire()
{
int x, y, i;
fin>>n>>m>>start;
for(i=1; i<=m; i++)
{
fin>>x>>y;
inserare(lista[x], y);
}
}
void bfs(int start)
{
int C[NMAX], x, prim, ultim;
LSI cont = new nod;
C[0]=start;
prim=ultim=0;
uz[start]=1;
while(prim<=ultim)
{
x=C[prim++];
for(cont=lista[x]; cont; cont=cont->urm)
if(!uz[cont->x])
{
uz[cont->x]=1;
C[++ultim]=cont->x;
drum[cont->x]=drum[x]+1;
}
}
}
void inserare(LSI &lista, int x)
{LSI p=new nod;
p->x=x;
p->urm=lista;
lista=p;
}