Rechercher : dans
Par :

Implémentation de l'algo de Dijkstra en C

Dernière réponse le 9 mai 2009 à 00:50:25 Thierry, le 20 déc 2005 à 20:51:24 
 Signaler ce message aux modérateurs

Bonjour,

je cherche à implémenter l'algorithme de Dijkstra en C afin de réaliser un programme de calcul du court chemin.

La vitesse d'exécution est un critère important donc je dois choisir une structure de donnée adaptée.

J'ai entendu que le tas de Fibonacci est la structure optimale pour cet algorithme. Mais je ne sais pas du tout comment réaliser cette structure !

Quelqu'un aurait il une suggestion, ça m'aiderait beaucoup ! Merci d'avance !

Meilleures réponses pour « Implémentation de l'algo de Dijkstra en C » dans :
Exercice assembleur x86 nombre premier VoirIntroduction Notions abordées dans cet exercice Enoncé Rappel Corrigé Explication Introduction Ce petit exercice d'assembleur vise les architectures x86 (Processeurs Intel et Amd 32 bits) et utilise la syntaxe de Nasm, un assembleur...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
WebFldrs XP, c'est quoi ? VoirVous vous inquiétez de la présence d'une application nommée "WebFldrs XP" dans votre panneau de configuration ? Pas de panique, il s'agit uniquement de la fonctionnalité Web Folders de 2000/XP, c'est-à-dire un implémentation du protocole WebDAV...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Langage C - Les opérateurs VoirQu'est-ce qu'un opérateur ? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc. On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...

2

bacchuss, le 20 déc 2005 à 21:49:34

Salut,

http://www.commentcamarche.net/forum/affich-1879211-demande-­d-un-algorithme-de-plus-court-chemin __________________________________________
01001001110101001010100101 et plus si affinités

Répondre à bacchuss

3

Thierry, le 20 déc 2005 à 22:47:37

Salut, je n'ai malheureusement pas trouvé ce que je cherchais sur ce post.

Mais merci quand même, c'est le geste qui compte ...

a+

Répondre à Thierry

4

mamiemando, le 21 déc 2005 à 00:46:36

Tiens c'est marrant j'en ai programmé un aujourd'hui, mais en c++. Tu peux te baser comme moi sur cette page :
http://www.apprendre-en-ligne.net/graphes/dijkstra/algorithm­e.html

Je viens de tomber sur une implémentation c++ ici mais ça te parle peut être moins :
http://www.nimbustier.net/publications/djikstra/implementati­on.html

Quoiqu'il en soit il faut que tu attrapes le reflexe GOOGLE !!!!! :-)

Bonne chance

Répondre à mamiemando

19

noucha000, le 6 mai 2007 à 23:40:29

Salut mamiemando!!!
je suis nouvelle sur le site ! je cherche le code de l'algorithme du plus court chemin de dijkstra. si vous pouvez m'aidez cela me fera très plaisir. mon adresse: mariamoutman@yahoo.fr
merci d'avance!!!

Répondre à noucha000

5

spamware, le 14 avr 2006 à 12:01:23

Salut , je chercher l'algo de dijkstra en c , j'ai trouver sur google plusieurs algorithmes mais j'ai rien compris a la stucture alors si vous pouvez m'aider merci

Répondre à spamware

6

mamiemando, le 14 avr 2006 à 13:50:58

Je t'invite à relire les deux liens que j'ai donné précédemment :
http://www.apprendre-en-ligne.net/graphes/dijkstra/algorithm­e.html
http://www.nimbustier.net/publications/djikstra/implementati­on.html

Anvant de s'attaquer à la compréhension du programme en C, il faut déjà avoir bien compris le principe de l'algorithme lui même :

1) Initialisation
- on choisit une source
- on initialise un vecteur de prédecesseurs et de poids

2) Itération
- on cherche l'arc de poids minimal se raccrochant aux sommets traités
- on met à jour le vecteur de prédécesseurs et de poids

A l'issue de l'algorithme le vecteur de poids te donne le poids du plus court chemin pour chaque sommet du graphe, et le vecteur de prédecesseurs le sommet duquel il faut venir pour l'atteindre de manière optimale.

On est dès lors en mesure de reconstituer les plus court chemin partant de la source pour chaque sommet du graphe à partir du vecteur de prédecesseurs.

Bonne chance

Répondre à mamiemando

7

spamware, le 14 avr 2006 à 17:29:19

Merci, mais j'ai deja visiter ces sites et ca ma pas trop aider

Répondre à spamware

8

mamiemando, le 14 avr 2006 à 19:11:37

As-tu compris l'algorithme en lui même au delà de l'implémentation ?

Répondre à mamiemando

9

spamware, le 14 avr 2006 à 19:50:21

Oui j'ai tres bien compris l'algo de dikstra , j'ai meme resolu des exercises concernant l'algo mais j'ai pas reussi a l'implementer en c j'ai essayé plusieurs methodes sans aboutir a un resultat

Répondre à spamware

10

mamiemando, le 14 avr 2006 à 20:41:26

Ben là c'est juste du C... Il faudrait que tu nous donnes ton algorithme pour qu'on voit ce qui déconne. Mais normalement si tu transpose les algos donnés dans les liens ci-dessus il n'y a pas de soucis.

Bonne chance

Répondre à mamiemando

11

spamware, le 14 avr 2006 à 21:45:38

Je trouve que pour implementer l'algo de dijkstra en c est un peu compliquer et c'est pas aussi simple que tu le dis , j'ai bien compris le principe mais je seche dans les iterations et merci quand meme

Répondre à spamware

12

mamiemando, le 14 avr 2006 à 22:09:59

Donne moi ton code et on va essayer de voir (par contre je ne suis pas là ce week-end)...

Répondre à mamiemando

13

spamware, le 16 avr 2006 à 16:57:52

Salut, je dois utiliser 2 matrices l'une contient les successeures et l'autre contient le poid de chaque arcs , c 1 tp que je dois rendre prochainement alors si tu a l'algo de dijkstra en c tu peux me le donner pour voir l'idée merci

Répondre à spamware

14

mamiemando, le 18 avr 2006 à 18:55:47
  • +1

Si c'est une matrice c'est tout s'implement que tu appliques un Dijkstra en prenant pour source plusieurs (ou la totalité des) sommets du graphe.

L'algorithme de Dijkstra retourne un vecteur de poids et un de successeurs. Il suffit donc de mettre ces vecteurs les uns en dessous des autres pour obtenir les deux matrices dont tu parles.

Idéalement tu peux coder un algorithme de dijkstra qui prend en paramètre :
- le graphe (ou la matrice décrivant le graphe)
- le sommet source
... et qui retourne :
- le vecteur de poids
- le vecteur de successeurs

On va supposer que les sommets sont identifiés par un entier pour simplifier, et que les arcs sont pondérés par un entier positif

Exemple :

typedef unsigned int vertex_t;
typedef unsigned int weight_t;

void dijkstra(
  const graph_t & g, // le graphe
  const vertex_t & src, // le sommet source
  std::vector<vertex_t> & succs,
  std::vector<weight_t> & poids
){
  // mon algo remplit succs et poids
}

...qui sera appelée par une fonction qui calculera toute la matrice
void dijkstra_matrix(
  const graph_t & g, // le graphe
  std::vector<std::vector<vertex_t> > & succs_mat,
  std::vector<std::vector<weight_t> > & poids_mat
){
  vertex_t vit=0;
  vertex_t vend=g.card_v(); //retourne le nombre de sommets
  for(vit = 0 ; vit != vend ; ++vit){
    //calculer le dijkstra pour la source courante
    std::vector<vertex_t> succs =  std::vector<vertex_t>(g.card_v());
    std::vector<weight_t> poids =  std::vector<weight_t>(g.card_v());
    dijkstra(g,vit,succs,poids);
    succs_mat.push_back(succs);
    poids_mat.push_back(poids);
  }
}

Il faut par ailleurs :
- soit implémenter une classe de graphe
- soit repartir d'une classe de graphe d'une lib existante, genre la lib boost
- soit se baser sur une matrice d'adjacence décrivant le graphe, dans laquelle il faudra caractériser un poids infini pour les sommets non adjacents.

Bonne chance

Répondre à mamiemando

15

spamware, le 18 avr 2006 à 19:54:11

Salut , je te remercie pour ton aide mais j'ai pas eu de probleme pour construire les deux matrices , mon prg doit afficher :
a chaque etape l'ensemble s et s'
afficher en dernier etape la liste des plus court chemins entre tt couple
de sommets ainsi que leurs valeurs.
et merci encore

Répondre à spamware

24

douja, le 11 jan 2008 à 15:20:13

Slt.pouvez vous médé pour lalg de djikstra le plus to ossibl stp. é merci en avance

Répondre à douja

16

mamiemando, le 20 avr 2006 à 12:29:41

Donne moi ton code actuel et on va regarder ça... Mais a priori c'est vraiment très simple, je suis un peu surprise que ça te bloque...

Répondre à mamiemando

17

spamware, le 20 avr 2006 à 16:06:10

C bon j'ai reussi a l'implementer tt seul

Répondre à spamware

20

noucha000, le 6 mai 2007 à 23:46:58

Salut sapamware
c'est urgent!!!
je suis nouvelle sur le site.
je cherche le code du plus court chemin de dijkstra en c++ ou bien en c. si tu peux m'aider? mon adresse mariamoutman@yahoo.fr
merci d'avance!!!

Répondre à noucha000

21

mamiemando, le 7 mai 2007 à 13:20:34

En C++ avec la lib boost :
http://www.boost.org/libs/graph/doc/dijkstra_shortest_paths.­html

Un exemple
http://www.boost.org/libs/graph/example/dijkstra-example.cpp­

Pour compiler, après avoir installé boost :

g++ -W -Wall -I/usr/include/boost dijkstra-example.cpp


Bonne chance

Répondre à mamiemando

18

Mouna, le 19 fév 2007 à 14:23:49

Salut,
je cherche à implémenter l'algorithme de Dijkstra en matlab afin de réaliser un programme de calcul du court chemin

Répondre à Mouna

22

doudou, le 30 déc 2007 à 13:19:28

Je ve lalg de djikstra. svp tré urgen?

Répondre à doudou

23

noucha000, le 1 jan 2008 à 22:29:25

Envoie moi ton mail je vais t'envoyer l'algorithme implémenté en c.

Répondre à noucha000

douja, le 11 jan 2008 à 15:14:17
  • +1

Salu,comen sa va stp pe tu menvoyé lalg de djikstra le plu to poss .merci davance

Répondre à douja

31

jlh, le 4 mar 2009 à 18:42:45
  • +1

Bonjour je veux appliquer lalgo de dijkstra sur mon code de graphe qui affiche les stations parisiennes et je ne sais pas comment faire.
merci

Répondre à jlh

33

Chrls.0, le 9 mai 2009 à 00:47:46

Salut,

je me baladais sur le forum car je suis en train de coder un jeu, j'essaye de coder l'algorithme de Dijkstra sans résultat, j'ai vu que tu proposais de l'envoyer à qui laisserait son mail donc j'essaye même si le post date d'un an:
chrls.0@hotmail.fr sa me sauverait la vie!

D'avance merci :)

Répondre à Chrls.0

34

 Chrls.0, le 9 mai 2009 à 00:50:25

Chrls.0@hotmail.fr

Répondre à Chrls.0

25

allal, le 15 jun 2008 à 10:45:18
  • +1

Merci mais je veu les procedures suivantes de l'Initialisation et l'ajout et suppression et l'affichage d'un graphe

Répondre à allal

26

Legacy, le 25 jun 2008 à 17:46:58

Bjr,
je voudrais avoir le code C++ des algo Kruskal(à l'aide des ensembles disjoints et files de priorités dynamique) et de Prim

Répondre à Legacy

27

TURBOXPLAY, le 28 sep 2008 à 19:49:02

Slt, j'ai b1 lus les différentes reponses, mais moi je voulais plus cette implémentation en C++, si quelqu'un peut m'aider ça me fera très plaisir.....

Répondre à TURBOXPLAY

30

informatique, le 4 mar 2009 à 09:31:03

Si tu trovez le solution envoier a la mail mlahcine@yahoo.fr

Répondre à informatique

32

salimasalima80, le 28 avr 2009 à 11:06:08
  • +1

Je veut l'algorithme de plus court chemin

Répondre à salimasalima80