/*
 * DINH_CHARBONNEL_main.c
 *
 *  Created on: 5 janv. 2013
 *      Author: Thomas
 */


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

int *rangs, *matrice_incidence;
unsigned nombre_sommets, nombre_arcs, sommet_depart;

int rec_element(int ligne, int colonne) {
  return matrice_incidence[ligne * nombre_sommets + colonne];
}

void def_element(int ligne, int colonne, int valeur) {
  matrice_incidence[ligne * nombre_sommets + colonne] = valeur;
}

/*
 * Lit le fichier et remplit les variables globales.
 */
int lire_fichier(const char *nom_fichier) {
  FILE *fichier = fopen(nom_fichier, "r");
  char tampon[101] = "";
  unsigned i;
  int extremite_initiale, extremite_terminale, valeur_arc;

  fscanf(fichier, "%d\n", &nombre_sommets);
  fscanf(fichier, "%d\n", &nombre_arcs);

  matrice_incidence = malloc(nombre_sommets * nombre_sommets * sizeof(int));

  // Initialisation de la matrice
  for(i = 0 ; i < nombre_sommets * nombre_sommets ; i++)
    matrice_incidence[i] = -1;

  while(1) {
    fgets(tampon, 100, fichier);

    if(!strcmp(tampon, "-1")) break;


  }

}

/*
 * Renvoie le nombre de prédécesseurs.
 */
unsigned predecesseurs(int sommet, int **predecesseurs) {
  unsigned i, j, nombre_predecesseurs = 0;

  for(i = 0 ; i < nombre_sommets ; i++) // Pour chaque sommet
    if(rec_element(i, sommet) == 1) // Si le sommet actuel est un prédécesseur
      nombre_predecesseurs++; // On l'ajoute

  if(!nombre_predecesseurs) return 0; // Retour anticipé

  *predecesseurs = malloc(nombre_predecesseurs * sizeof(int));

  for(i = 0, j = 0 ; i < nombre_sommets ; i++, j++)
    if(rec_element(i, sommet) == 1)
      *predecesseurs[j] = i; // On ajoute le ième sommet à la liste des prédécesseurs.

  return nombre_predecesseurs;
}

int main(void) {
  char nom_fichier[20];
  int *predecesseurs;

  printf("Calcul du rang\nGraphe : ");
  scanf("%s", nom_fichier);
  printf("Sommet de départ : ");
  scanf("%d", &sommet_depart);

  lire_fichier(nom_fichier);

  // Allocations.
  rangs = malloc(nombre_sommets * sizeof(int));


  // Libérations.
  if(rangs)             free(rangs);
  if(matrice_incidence) free(matrice_incidence);

  return EXIT_SUCCESS;
}

