Pagini recente » Cod sursa (job #716687) | Cod sursa (job #999458) | Cod sursa (job #846506) | Cod sursa (job #2136081) | Cod sursa (job #793765)
Cod sursa(job #793765)
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int viz;
int *vec;
int nvec;
} state;
void add(state* viz, int a, int b) {
viz[a].vec = (viz[a].nvec == 0 ? (int*)malloc(sizeof(int)) : (int*)realloc(viz[a].vec,(viz[a].nvec + 1)*sizeof(int)));
viz[a].vec[viz[a].nvec] = b;
viz[a].nvec++;
}
int sort(const void *x, const void *y) {
int *a = (int*)x;
int *b = (int*)y;
return *a - *b;
}
void vizit(state* viz, int nod, FILE *fis) {
int i;
viz[nod].viz = 1;
fprintf(fis, "%i ", nod);
for(i = 0; i < viz[nod].nvec; i++)
if(viz[viz[nod].vec[i]].viz == 0)
vizit(viz, viz[nod].vec[i], fis);
}
int main() {
int x, y, N, M, i, j;
state *viz;
FILE *fis;
fis = fopen("sortaret.in", "rt");
fscanf(fis, "%i %i", &N, &M);
viz = (state*)calloc(N+1, sizeof(state));
for(i = 0; i < M; i++) {
fscanf(fis, "%i %i", &x, &y);
add(viz, x, y);
}
fclose(fis);
for(i = 1; i <=N; i++)
if(viz[i].nvec > 0)
qsort(viz[i].vec, viz[i].nvec, sizeof(int), sort);
fis = fopen("sortaret.out","wt");
for(i = 1; i <=N; i++)
if(viz[i].viz == 0)
vizit(viz, i, fis);
fclose(fis);
free(viz);
return 0;
}