Mai intai trebuie sa te autentifici.
Cod sursa(job #251834)
Utilizator | Data | 3 februarie 2009 14:16:38 | |
---|---|---|---|
Problema | BFS - Parcurgere in latime | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.73 kb |
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
FILE *f=fopen("bfs.in","r"),*g=fopen("bfs.out","w");
#define maxn 100010
vector <int> a[maxn];
int n,m,s[maxn],cost[maxn],gg[maxn];
void bfs(int nod){
int i,j,l;
memset(cost,-1,sizeof(cost));
l=1;
s[l]=nod;
cost[nod]=0;
for(i=1;i<=l;i++)
for(j=0;j<gg[s[i]];j++)
if(cost[a[s[i]][j]]==-1){
s[++l]=a[s[i]][j];
cost[a[s[i]][j]]=cost[s[i]]+1;
}
}
int main(){
int i,x,y,nod;
fscanf(f,"%d %d %d",&n,&m,&nod);
for(i=1;i<=m;i++){
fscanf(f,"%d %d",&x,&y);
a[x].push_back(y);
}
for(i=1;i<=n;i++){
gg[i]=a[i].size();
}
bfs(nod);
for(i=1;i<=n;i++)
fprintf(g,"%d ",cost[i]);
fclose(f);
fclose(g);
return 0;
}