Bonsoir, j'ai écrit un petit code qui permet de représenter un jeu dont vous êtes le héros par un graphe sous forme de liste d'adjacence.
Je commence d'abord par un travailler sur un graphe tout simple avec peu de noeuds pour pouvoir travailler plus facilement dessus puis ensuite bien entendu, ecrire un vrai scenario.

Je precise, on donne trois choix maximum à l'utilisateur pour chaque sommet visité, d'où les 3 pointeurs de sommets dans ma structure.

Je vous donne déjà mon code :

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
 
#include <stdio.h>
#include <stdlib.h>
 
#define FICHIER "donnees.txt"
 
struct sommet {
  int nom;
  struct sommet *s1;
  struct sommet *s2;
  struct sommet *s3; };
 typedef struct sommet sommet;
 
struct graphe {
  int nb_sommets;
  sommet* liste_som; };
typedef struct graphe graphe;
 
void constr_graphe(graphe*);
void afficher_sommet(int);
void parcours_graphe(graphe);
int choixvalide(int,sommet*);
 
 
int main(void) {
 
  graphe g;
 
  constr_graphe(&g);
  parcours_graphe(g);
 
  return 0; }
 
void parcours_graphe(graphe g) {
 
   int choix;
   sommet *ptr;
   ptr=&g.liste_som[0];
 
   while(ptr->s1!=NULL) {
 
      do {
      afficher_sommet(ptr->nom);
      scanf("%d",&choix); }
 
   while(!choixvalide(choix,ptr)); 
 
      if(choix==1) ptr=ptr->s1;
      if(choix==2) ptr=ptr->s2;
      if(choix==3) ptr=ptr->s3;   } } 
 
 
int choixvalide(int choix,sommet *ptr) {
 
   if(choix==1) return 1; 
 
   if(choix==2) {
      if(ptr->s2==NULL)  return 0; 
      return 1; }
 
   if(choix==3) {
      if(ptr->s3==NULL)  return 0;
      return 1; } 
 
   else return 0; }
 
 
void constr_graphe(graphe *g) {
 
   FILE *fp;
   int tmp[3];
   int i,j,k;
 
   fp=fopen(FICHIER,"r");
   if(fp==NULL) {
      fprintf(stderr,"Erreur lors de l'ouverture du fichier\n");
      exit(0); }
 
   g->nb_sommets=4;
   g->liste_som=(sommet*)malloc(sizeof(sommet));  
 
   for(i=0;i<=g->nb_sommets;i++) {
 
      j=0;
 
      for(k=0;k<3;k++)
      fscanf(fp,"%d",&tmp[k]);
      g->liste_som[i].nom=i;
 
      if(tmp[j]==0) {
         g->liste_som[i].s1=NULL; }
      else {
         g->liste_som[i].s1=&(g->liste_som[tmp[j++]]); }
 
      if(tmp[j]==0) {
         g->liste_som[i].s2=NULL; } 
      else {
         g->liste_som[i].s2=&(g->liste_som[tmp[j++]]); }
 
      if(tmp[j]==0) {
         g->liste_som[i].s3=NULL; }
      else {
         g->liste_som[i].s3=&(g->liste_som[tmp[j]]); } } }
 
 
 
void afficher_sommet(int x) {
 
    switch(x) {
 
       case 0 : printf("Ceci est le corps de la page 0 :\n1) Aller à la page 1\n2) Aller à la page 2\n3) Aller à la page 3\n"); 
          break;
 
       case 1 : printf("Ceci est le corps de la page 1 :\n1) Aller à la page 4\n");
          break;
 
       case 2 : printf("Ceci est le corps de la page 2 :\n1) Aller à la page 1\n2) Aller à la page 4\n");
          break;
 
       case 3 : printf("Ceci est le corps de la page 3 :\n1) Aller à la page 2\n2) Aller à la page 4\n");
          break;
 
       case 4 : printf("Ceci est le corps de la page 4 :\n");
          break;
 
       default : printf("Probleme de choix"); } }
Mon fichier donnees.txt :

1 2 3
4 0 0
1 4 0
2 4 0
0 0 0


Je pense que mon code est bon je n'ai pas eu d'erreur particulière, mais maintenant j'aimerais implanter l'algorithme de Djikstra, alors je voudrais savoir :

est ce que dans ma structure sommet, je dois rajouter 3 champs :
int poids1;
int poids2;
int poids3;

qui correspondraient respectivement au poids de l'arete du sommet origine vers un premier sommet, puis de l'arete du sommet origine vers un deuxieme sommet et enfin l'arete du sommet d'origine vers un troisieme sommet.

Et puis comme je l'ai fais dans le code, rajouter des chiffres pour le poids dans le fichier donnees.txt, pour pouvoir initialiser les poids de toutes les arêtes.

Probleme, pour le reseau d'une ville, le poids correspondrait aux nombres de km separant une ville d'une autre, que dans ce cas là le poids correspond quoi exactement? aux nombres d'arrete entre le sommet d'origine et le sommet suivant?

Enfin voilà je suis un peu perdu, si quelqu'un pourrait m'aider un peu ça serait sympa

Merci d'avance