Pagini recente » Cod sursa (job #1113983) | Cod sursa (job #101707) | Cod sursa (job #3169124) | Cod sursa (job #1016418)
#include <stdio.h>
#include <stdlib.h>
/** Balint Florin-Lorand
BFS-tree
*/
int neighbours[100000][2000];
int size_n[100000];
int dis[1000];
int visit[100000];
FILE *t;
FILE *g;
void readedges(int n,int m)
{
int x,y;
int i;
for (i=1;i<=n;i++) size_n[i]=0;
printf("\n");
for (i=1;i<=m;i++)
{
fscanf(t,"%d %d",&x,&y);
++size_n[x];
neighbours[x][size_n[x]]=y;
}
}
void BFS_init(int n,int source)
{
int i;
for(i=1;i<=n;i++) {dis[i]=-1;visit[i]=0;}
dis[source]=0;
visit[source]=1;
}
void BFS(int n,int source)
{
int i,k=1;
int bfs_list[n];
bfs_list[1]=source;
int j;
for (i=1;i<=k;i++)
{
if (k==n) break;
for (j=1;j<=size_n[bfs_list[i]];j++)
{
if (visit[neighbours[bfs_list[i]][j]]==0)
{
dis[neighbours[bfs_list[i]][j]]=dis[bfs_list[i]]+1;
visit[neighbours[bfs_list[i]][j]]=1;
k++;bfs_list[k]=neighbours[bfs_list[i]][j];
}
}
}
for (i=1;i<=n;i++) fprintf(g,"%d ",dis[i]);
}
int main()
{
int n,m,s;
t=fopen("bfs.in","r");
g=fopen("bfs.out","w");
fscanf(t,"%d %d %d",&n,&m,&s);
readedges(n,m);
BFS_init(n,s);
BFS(n,s);
fclose(t);
fclose(g);
return 0;
}