IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Suppression d'un arc dans un graphe


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 66
    Points : 49
    Points
    49
    Par défaut Suppression d'un arc dans un graphe
    Bonsoir,

    Cela fait 3h que je coince sur un bout de code.
    Je m'explique, j'ai un graphe avec des etats et des arcs. Je veux coder une fonction qui me supprimer un arc donner d'un certain etat.

    Voici la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    typedef struct {
        int symbol;
        int destination;
    } Arc;
     
    typedef struct {
        int num_arcs;
        bool is_final;
        Arc* arcs;
    } State;
     
    typedef struct {
        int num_states;
        int initial_state;
        State* states;
    } Automaton;
    Et la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /*Suprimme une transition de l'automate*/
    void rm_arc(Automaton *a, int from, int to, int symbol){
    	if(has_arc(a, from, to, symbol) == TRUE){
    		int i=0;
    		while(a->states[from].arcs[i].destination!=to && a->states[from].arcs[i].symbol!=symbol && i<a->states[from].num_arcs){
                i++;
            }
     
            free(&a->states[from].arcs[i]);
    	}
    }
    Lorsque j’exécute cette fonction, il y a toujours autant d'arcs...

    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 562
    Points : 7 628
    Points
    7 628
    Par défaut
    Bonjour,

    Lorsque j’exécute cette fonction, il y a toujours autant d'arcs...
    En effet, rien ici ne supprime d'arc.
    le free() reçoit l'adresse d'un élément du tableau arcs[] qui contient des pointeurs, donc l'adresse d'un pointeur.
    Il faudrait plutôt lui passer le pointeur (sans le &) ainsi la mémoire serait libérée.
    Et en plus de la libération, il faudrait indiquer qu'il manque un arc par exemple en effaçant le pointeur par a->states[from].arcs[i]=0;

Discussions similaires

  1. problème d'insertion d'arc dans un graph (Jgraph)
    Par aliouchi dans le forum Graphisme
    Réponses: 0
    Dernier message: 26/08/2013, 23h26
  2. chemin, arc dans un graphe
    Par semaj_james dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/11/2005, 17h45
  3. Réponses: 4
    Dernier message: 02/07/2004, 20h14
  4. Réponses: 4
    Dernier message: 22/12/2003, 12h12
  5. Réponses: 14
    Dernier message: 01/12/2003, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo