Pagini recente » Istoria paginii runda/tesst | Cod sursa (job #2637140) | Cod sursa (job #1518990) | Cod sursa (job #2999502) | Cod sursa (job #1282837)
#include <stdio.h>
#include <stdlib.h>
#define N_MAX 100000
typedef struct lista {
int nod;
struct lista *urm;
} lista;
lista *g[N_MAX+1];
int noduri, muchii, varf;
int cost[N_MAX + 1], vizitat[N_MAX + 1], s[N_MAX+1];
void adauga(int i, int j) {
lista *p = malloc( sizeof(lista));
p -> nod = j;
p ->urm = g[i];
g[i] = p;
}
void BFS(int nod) {
int i;
for ( i = 1; i <= noduri; i++)
cost[i] = -1;
cost[nod] = 0;
int L = 1;
s[L] = nod;
lista *p;
for ( i = 1; i <= L; i++ )
for ( p = g[ s[i] ]; p != NULL; p = p -> urm )
if ( cost[p -> nod] == -1 ) {
s[++L] = p -> nod;
cost[s[L]] = cost[s[i]] + 1;
}
}
int main()
{
FILE *in = fopen("bfs.in","r");
FILE *out = fopen("bfs.out","w");
int i, a, b;
fscanf(in, "%d %d %d", &noduri, &muchii, &varf);
for ( i = 1; i <= muchii; i++ ) {
fscanf(in,"%d %d", &a, &b);
adauga(a,b);
}
fclose(in);
BFS(varf);
for ( i = 1; i <= noduri; i++)
fprintf(out,"%d ", cost[i]);
fclose(out);
return 0;
}