Pagini recente » Cod sursa (job #2777671) | Cod sursa (job #2955736) | Cod sursa (job #906391) | Cod sursa (job #1862814) | Cod sursa (job #2632865)
#include <stdio.h>
using namespace std;
#include <vector>
#include <queue>
#define NMAX 100000
vector <int> g[NMAX];
queue <int> q;
int viz[NMAX+1],s,dist[NMAX+1];
void bfs(int nod){
int i,first;
viz[s]=1;
q.push(s);
while(!q.empty()){
first=q.front();
for(auto next : g[first]){
if(viz[next]==0){
viz[next]=1;
dist[next]=dist[first]+1;
q.push(next);
}
}
q.pop();
}
}
int main()
{
FILE *fin,*fout;
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
int n,m,x,y,i,nr,j;
fscanf(fin,"%d%d%d",&n,&m,&s);
for(i=1;i<=m;i++){
fscanf(fin,"%d%d",&x,&y);
g[x].push_back(y); ///muchii cu liste de adiacenta
}
for(i=1;i<=n;i++){
bfs(i);
if(dist[i]==0&&i!=s){
fprintf(fout,"-1 "); ///nu exista conexiune intre S si nod
}
else if(i==s){
fprintf(fout,"0 ");
}
else
fprintf (fout, "%d ", dist[i]);
for(j=1;j<=n;j++){
viz[j]=0;
}
}
fclose(fin);
fclose(fout);
return 0;
}