Pagini recente » Cod sursa (job #1993978) | Cod sursa (job #1786921) | Cod sursa (job #1150620) | Cod sursa (job #1767652) | Cod sursa (job #2628980)
#include <iostream>
#include <fstream>
using namespace std;
long long int gasit,vizitat[100001], c[100001],nr, a[10000][10000], N,M,S,x,y,prim,ultim,k;
int main()
{
ifstream f("bfs.in");
ofstream g("bfs.out");
//citire N M S
f>>N>>M>>S;
//transcriere muchie in matricea de adiacenta
for(int i=1; i<=M; i++)
{
f>>x>>y;
a[x][y]=1;
}
//Initializare coada cu primul element, nodul S;
prim=ultim=1;
c[prim]=S;
vizitat[S]=0;
//parcurgerea in latime a grafului
while(prim<=ultim)
{ //contorul care numara lungimea drumului pt fiecare nod
k=c[prim];
for(int i=1; i<=N;i++)
{ if((a[k][i]==1) &&(vizitat[i]==0))
{ if(i==S)
vizitat[i]=0;
else
{ultim++;
c[ultim]=i;
vizitat[i]=vizitat[k]+1;
} //in vectorul vizitat se trece lungimea fiecarui drum de la S-I
}
}
prim++;
}
for(int i=1; i<=N; i++)
if((vizitat[i]==0) &&(i!=S))
{
vizitat[i]=-1;
g<<vizitat[i]<<" ";
}
else g<<vizitat[i]<<" ";
g<<endl;
return 0;
}