Pagini recente » Borderou de evaluare (job #3118110) | Borderou de evaluare (job #3118072) | Cod sursa (job #2001995) | Monitorul de evaluare | Cod sursa (job #632491)
Cod sursa(job #632491)
#include<iostream>
#include<fstream>
#include<queue>
using namespace std;
#define Nmax 200000
long T[2][Nmax], start[Nmax], sel[Nmax],p, cost[Nmax];
queue <long> coada;
void bf(long nod)
{
coada.push(nod);
sel[nod]=1; cost[nod]=0;
while(1<=coada.size())
{
p=start[coada.front()];
while(p)
{
if(sel[T[0][p]]==0)
{
coada.push(T[0][p]);
sel[T[0][p]]=1;
cost[T[0][p]]=cost[coada.front()]+1;
}
p=T[1][p];
}
coada.pop();
}
}
int main ()
{
ifstream f("bfs.in");
ofstream g("bfs.out");
long n,m,s,i,j,k=0;
f>>n>>m>>s;
while(f>>i>>j)
{
k++;
T[0][k]=j;
T[1][k]=start[i];
start[i]=k;
}
for(i=1;i<=n;i++) cost[i]=-1;
bf(s);
for(i=1;i<=n;i++) g<<cost[i]<<" ";
f.close();
g.close();
return 0;
}