#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>

struct graph_s {
  // Nombre de sommets
  int n;
  // Degré de chaque somment
  int degre[100];
  // Listes d'adjacences (tableau de tableaux)
  int voisins[100][10];
};

typedef struct graph_s graph;

int degre_max(graph* g, bool* partie) {
  // À compléter
  return -1;
}

bool* accessibles(graph* g, int s) {
  // À compléter
  return NULL;
}

int nb_accessibles(graph* g, int s) {
  int res = 0;
  bool* vu = accessibles(g, s);
  if (vu == NULL) {return -1;}
  for (int i = 0; i < g->n; i += 1) {
    if (vu[i]) {
      res += 1;
    }
  }
  free(vu);
  return res;
}

int degre_etoile(graph* g, int s) {
  // À compléter
  return -1;
}

int main(void) {

  graph g_exemple = {
    .n = 9,
    .degre = {0, 2, 1, 2, 2, 3, 1, 1, 0},
    .voisins = {
    /* 0 */ {-1}, // Degré 0 : valeur ignorée
    /* 1 */ {0, 4},
    /* 2 */ {4},
    /* 3 */ {0, 4},
    /* 4 */ {6, 7},
    /* 5 */ {2, 4, 8},
    /* 6 */ {7},
    /* 7 */ {8},
    /* 8 */ {-1} // Degré 0 : valeur ignorée
    }
  };

  bool pairs[9] = {true, false, true, false, true, false, true, false, true};

  graph* g = &g_exemple;

  printf("Le degré maximal d'un sommet pair de g est : %d\n\n", degre_max(g, pairs));

  for (int s = 0; s < g->n; s += 1) {
    printf("Sommet %d : %d sommet(s) accessible(s)\n", s, nb_accessibles(g, s));
  }

  printf("\n");

  for (int s = 0; s < g->n; s += 1) {
    printf("d*(%d) = %d\n", s, degre_etoile(g, s));
  }

}