Pagini recente » Cod sursa (job #2926636) | Cod sursa (job #2372606) | Cod sursa (job #3164667) | Cod sursa (job #1431855) | Cod sursa (job #2469455)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
string text="bfs";
ifstream fin(text+".in");
ofstream fout(text+".out");
typedef long long ll;
int n,m,s;
int a[NMAX/10][NMAX/10];
int vizitat[NMAX],distanta[NMAX];
int c[NMAX];
void bfs(int x){
int p,u,i;
p=u=1;
c[1]=x; vizitat[x]=1; distanta[x]=0;
while(p<=u){
x=c[p++];
for(i=1;i<=n;i++){
if(a[x][i]){
if(!vizitat[i]){
vizitat[i]=1;
distanta[i]=distanta[x]+1;
c[++u]=i;
}
else{
if(distanta[i]>distanta[x]+1) distanta[i]=distanta[x]+1, c[++u]=i;
}
}
}
}
}
int main()
{
int i,x,y;
fin>>n>>m>>s;
for(i=1;i<=m;i++){
fin>>x>>y;
a[x][y]=1;
}
bfs(s);
for(i=1;i<=n;i++){
if(vizitat[i]) fout<<distanta[i]<<" ";
else fout<<"-1 ";
}
return 0;
}