[C]Initialiser un graphe
Fermé
Paul
-
1 août 2006 à 13:36
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 2 août 2006 à 15:21
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 2 août 2006 à 15:21
A voir également:
- [C]Initialiser un graphe
- Graphe easy - Télécharger - Études & Formations
- Comment faire un graphe sur excel - Guide
- Rã£â©initialiser manette ps4 - Guide
- Impossible initialiser disque dur redondance cyclique ✓ - Forum Disque dur / SSD
- Impossible d'initialiser le périphérique prn - Forum Windows 10
3 réponses
mamiemando
Messages postés
33407
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
29 novembre 2024
7 806
2 août 2006 à 09:41
2 août 2006 à 09:41
Le plus simple c'est que tu crées des fonctions qui vont te permettre d'écrire de manière très intuitive la construction de ce graphe particulier. Pour rester le plus général possible il faut associer a chaque sommet un identifiant unique (retourné par add_vertex).
Le contenu d'un sommet (que ce soit une chaine de caractère, ou un entier dans ton cas, intervient dans la construction du sommet).
Tu remarqueras que je rajoute une structure "arc" qui encapsule les données relatives à un arc (par exemple un poids), mais tu peux la laisser vide si tu le souhaites.
La structure "graph" dont je parle est la structure qui va encapsuler l'ensemble des sommets et des arcs et donc te permettre de les retrouver lors de la construction du graphe. Je pense que ta structure n'est pas très pratique à utiliser et sera peu efficace pour de grands graphes. Je te propose d'utiliser plutôt :
En toute rigueur la notion d'adjacence devrait figurer dans la structure graph et nonn dans la structure sommet mais tu peux t'en sortir comme ça. Si tu es curieux et que tu à l'intention de travailler sur de très gros graphes, tu peux regarder la lib boost (c++) qui est ultra performante pour tout ce qui est graphe.
Bonne chance
unsigned int add_vertex(struct graph g,struct noeud v); void add_edge(struct graph g,int id_src,int id_dst,struct arc e);
Le contenu d'un sommet (que ce soit une chaine de caractère, ou un entier dans ton cas, intervient dans la construction du sommet).
struct noeud new_vertex(int name);
Tu remarqueras que je rajoute une structure "arc" qui encapsule les données relatives à un arc (par exemple un poids), mais tu peux la laisser vide si tu le souhaites.
struct arc{ unsigned int weight; };
La structure "graph" dont je parle est la structure qui va encapsuler l'ensemble des sommets et des arcs et donc te permettre de les retrouver lors de la construction du graphe. Je pense que ta structure n'est pas très pratique à utiliser et sera peu efficace pour de grands graphes. Je te propose d'utiliser plutôt :
struct graph{ unsigned int num_vertices; // le nombre de sommet struct noeud ** vertices; //tableau de pointeurs sur chaque sommet du graphe }
En toute rigueur la notion d'adjacence devrait figurer dans la structure graph et nonn dans la structure sommet mais tu peux t'en sortir comme ça. Si tu es curieux et que tu à l'intention de travailler sur de très gros graphes, tu peux regarder la lib boost (c++) qui est ultra performante pour tout ce qui est graphe.
Bonne chance
En faite, ce que je voudrais savoir, c'est comment construire ce cas particulier de graphe.
Par exemple pour les sommets 1 et 5, est-ce que c'est comme ça, qu'il faut que je fasse pour construire le graphe de la figure
Si ce n'est pas comme cela, pourriez-vous m'indiquer comment cela s'écrit ?
Par exemple pour les sommets 1 et 5, est-ce que c'est comme ça, qu'il faut que je fasse pour construire le graphe de la figure
int main(void) { Graphe g1,g2,g3,g4,g5; g1->racine->n = 1; g->racine->tab[0] = g5->racine; g->racine->tab[1] = g3->racine; g5->racine->n = 5; g->racine->tab[0] = g2->racine; g->racine->tab[1] = g4->racine; /* etc..*/ return 0; }
Si ce n'est pas comme cela, pourriez-vous m'indiquer comment cela s'écrit ?
mamiemando
Messages postés
33407
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
29 novembre 2024
7 806
2 août 2006 à 15:21
2 août 2006 à 15:21
Le problème c'est que ca ne s'écrit pas aussi simplement car les tableaux d'arcs sortants stockés dans tes sommetsne sont pas alloués, donc ce genre d'écriture conduira inévitablement à une erreur de segmentation.
C'est pour celà que je t'ai proposé d'écrire des fonctions pour bien découper ton programme et le rendre lisible et facile à manipuler. En particulier, la fonction ajoutant un arc devra allouer tout ce qu'il faut dans tes structures de sommet pour que l'arc soit créé correctement.
Je te conseille très fortement de repartir sur les structures et prototypes de fonction que je t'ai proposé sinon tu risques d'avoir rapidement des problèmes... Maintenant tu es libre de faire ce que tu veux ^^
Bonne chance
C'est pour celà que je t'ai proposé d'écrire des fonctions pour bien découper ton programme et le rendre lisible et facile à manipuler. En particulier, la fonction ajoutant un arc devra allouer tout ce qu'il faut dans tes structures de sommet pour que l'arc soit créé correctement.
Je te conseille très fortement de repartir sur les structures et prototypes de fonction que je t'ai proposé sinon tu risques d'avoir rapidement des problèmes... Maintenant tu es libre de faire ce que tu veux ^^
Bonne chance