Pagini recente » Profil IfrimDiana | Cod sursa (job #1296745) | Cod sursa (job #769828) | Cod sursa (job #1685839) | Cod sursa (job #1489696)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct vectorInt {
int* data;
int size;
int capacity;
} vectInt;
typedef vectInt* vector;
vector vec_new(int initCap) {
if(initCap < 10) {
initCap = 10;
}
vector vect = (vector)malloc(sizeof(vectInt));
vect->capacity = initCap;
vect->size = 0;
vect->data = (int*)malloc(vect->capacity * sizeof(int));
return vect;
}
void vec_free(vector vect) {
free(vect->data);
free(vect);
}
void vec_push_back(vector vect, int val) {
if(vect->size == vect->capacity) {
vect->capacity = 2 * vect->capacity;
int* newData = (int*)malloc(vect->capacity * sizeof(int));
memcpy(newData, vect->data, vect->size * sizeof(int));
free(vect->data);
vect->data = newData;
}
vect->data[vect->size] = val;
vect->size++;
}
void vec_demo() {
vector vect = vec_new(0);
int i;
for(i=0; i<50; i++) {
vec_push_back(vect, 2 * i);
}
for(i=0; i<vect->size; i++) {
printf("vect[%d]=%d\n", i, vect->data[i]);
}
printf("vect->size=%d\n", vect->size);
printf("vect->capacity=%d\n", vect->capacity);
vec_free(vect);
}
void dfs(int x, vector* g, int* state) {
if(state[x] == 0) {
state[x] = 1;
int i;
for(i=0; i<g[x]->size; i++) {
dfs(g[x]->data[i], g, state);
}
}
}
int main() {
FILE* fin = fopen("dfs.in", "r");
int n, m;
fscanf(fin, "%d %d\n", &n, &m);
int i;
vector* g = (vector*)malloc((n + 1) * sizeof(vector));
for(i=0; i<=n; i++) {
g[i] = vec_new(0);
}
int x, y;
for(i=0; i<m; i++) {
fscanf(fin, "%d %d\n", &x, &y);
vec_push_back(g[x], y);
vec_push_back(g[y], x);
}
fclose(fin);
int* state = (int*)calloc(n + 1, sizeof(int));
int nb = 0;
for(i=1; i<=n; i++) {
if(state[i] == 0) {
nb++;
dfs(i, g, state);
}
}
FILE* fout = fopen("dfs.out", "w");
fprintf(fout, "%d\n", nb);
fclose(fout);
free(state);
for(i=0; i<=n; i++) {
free(g[i]);
}
free(g);
return 0;
}