Pagini recente » Cod sursa (job #71533) | Cod sursa (job #1375852) | Cod sursa (job #1118506) | Cod sursa (job #2140424) | Cod sursa (job #1259142)
#include<fstream>
using namespace std;
ifstream in("bfs.in");
ofstream out("bfs.out");
struct lista{
int i;
lista *urm;
};
struct lista *v[100005];
int coada[200005],cap=1,spate=0,n,m,s;
int sol[100005],viz[100005];
void adauga(int x,int y)
{
lista *nou;
nou = new lista;
nou->i = y;
nou->urm = v[x];
v[x] = nou;
}
void citire()
{
in>>n>>m>>s;
int x,y;
for(int j = 1 ; j <= m ; j++)
{
in>>x>>y;
adauga(x,y);
}
in.close();
}
void adauga_in_coada(int x)
{
coada[++spate] = x;
}
void parcurge(int start)
{
adauga_in_coada(start);
viz[start] = 1;
sol[start] = 0;
int k;
lista *it;
while(cap<=spate)
{
k = coada[cap];
viz[k] = 1;
for( it = v[k] ; it ; it = it->urm)
if(sol[it->i] == -1){
sol[it->i] = sol[k] + 1;
adauga_in_coada(it->i);
}
++cap;
}
}
void init()
{
for(int i = 1 ; i <= n ; i++){
sol[i] = -1;
viz[i] = 0;
}
}
int main()
{
citire();
init();
parcurge(s);
for(int i = 1 ; i <= n ; i++)
out<<sol[i]<<" ";
out.close();
return 0;
}