Bonsoir tout le monde
graph.h
#ifndef GRAPH_H
#define GRAPH_H
/**/
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#define INFINI INT_MAX
#define a 18
#define b 18
#define c 18
#define d 2
/**/
#define STQUENTIN 0
#define CAMBRAI 1
#define CAPELLE 2
#define LAON 3
#define AVESNES 4
#define CHARLEVILLEMEZIERES 5
#define REIMS 6
#define SOISSONS 7
#define VERVINS 8
#define NOYON 9
#define ROYE 10
#define AMIENS 11
#define COMPIEGNE 12
#define PERONNE 13
#define ARRAS 14
#define BAPAUME 15
#define DOUAI 16
#define VALENCIENNE 17
/**/
const char* tableau [c][d]={
"1","St-quentin",
"2","Cambrai",
"3","Capelle",
"4","Laon",
"5","Noyon",
"6","Peronne",
"7","Roye",
"8","Avesne",
"9","Charleville-Meziere",
"10","Vervins",
"11","Reins",
"12","Soisson",
"13","Amiens",
"14","Compiegne",
"15","Bapaume",
"16","Arras",
"17","Douai",
"18","Valenciennes"};
/**/
/*Ci-dessou la structure*/
struct table{
int km;
char destination;
char source;
char de;
char ar;
};
/*Ci-dessou*/
struct liste{
int villeprecedent;
char pasencoreVue;
};
#endif
graph.c
#include <stdlib.h>
#include <stdio.h>
#include "graph.h"
struct table tab;
struct liste lis;
int distance[18][18]={INFINI};
void result(){
}
int dist(){
int i,j;
/*ici on initialise les distances*/
distance[STQUENTIN][CAMBRAI]=39;
distance[STQUENTIN][CAPELLE]=50;
distance[STQUENTIN][LAON]=52;
distance[STQUENTIN][NOYON]=40;
distance[STQUENTIN][PERONNE]=29;
distance[STQUENTIN][ROYE]=48;
distance[CAPELLE][AVESNES]=16;
distance[CAPELLE][CAMBRAI]=54;
distance[CAPELLE][CHARLEVILLEMEZIERES]=68;
distance[CAPELLE][STQUENTIN]=50;
distance[CAPELLE][VERVINS]=17;
distance[LAON][REIMS]=45;
distance[LAON][SOISSONS]=32;
distance[LAON][STQUENTIN]=52;
distance[LAON][VERVINS]=32;
distance[NOYON][COMPIEGNE]=24;
distance[NOYON][ROYE]=20;
distance[NOYON][STQUENTIN]=40;
distance[ROYE][AMIENS]=41;
distance[ROYE][COMPIEGNE]=39;
distance[ROYE][NOYON]=20;
distance[ROYE][PERONNE]=31;
distance[ROYE][STQUENTIN]=48;
distance[PERONNE][AMIENS]=52;
distance[PERONNE][BAPAUME]=20;
distance[PERONNE][ROYE]=31;
distance[PERONNE][STQUENTIN]=29;
distance[CAMBRAI][ARRAS]=37;
distance[CAMBRAI][AVESNES]=59;
distance[CAMBRAI][BAPAUME]=30;
distance[CAMBRAI][CAPELLE]=54;
distance[CAMBRAI][DOUAI]=39;
distance[CAMBRAI][STQUENTIN]=39;
distance[CAMBRAI][VALENCIENNE]=26;
puts("les chemins\n");
for(i=0;i<a;i++){
for(j=0;j<b;j++){
if(distance[i][j]==INFINI){
printf(" -- ");
}
else { printf("%d ", distance[i][j]); }
}
puts("\n");
}
for(i=0;i<a;i++){
for(j=0;j<b;j++){
distance[i][j] = INFINI;
}
}
}
/*Voici l'algorithme de Dijkstra, pour le plus cours chemin*/
int recherche(char tabl[][b],int cout[][18],char dep,char arriv){
/*là on déclare des des variables pour*/
int i,j;
for(i=1;i<a;i++){
for(j=1;j<b;j++){
cout[i][j]=INFINI;
}
cout[i][j]=0;
}
while(cout!=0){
tab.source=dep;
for(i=1;i<lis.pasencoreVue;i++){
tab.destination= arriv;
}
}
return recherche(tabl,cout,tab.source,tab.destination);
}
/*ici c'est la fonction de départ, c'est là que l'on choisira sont parcourt
audémarage un tableau s'affichera avec les villes.
*/
void saisie()
{
int i,j;
puts("Bienvenue a la SNCF\n");
for(i=0;i<c;i++){
for(j=0;j<d;j++){
printf(" %s", tableau[i][j]);
}
puts("\n");
}
puts("\n");
/*Vous devrez saisir votre ville de départ et la ville d'arrivée*/
puts("Entrer l'indice de la ville du debut de parcours");
scanf("%c",&tab.de);
puts("Entrer l'indice de la ville de fin de parcours");
scanf("%c\n",&tab.ar);
/*ici on appelle la fonction recherche qui aura l'algorithme de Dijkstra
la fonction utilisera cette algorithme pour determiner le chemin le plus court
avec un cout minimum*/
recherche(tableau,distance,tab.de,tab.ar);
/*fin de programme*/
system("PAUSE");
}
******
La il, je suis perdue pour l'algo de la fonction recherche, je veux utiliser la fonction recherche avec la fonction dist qui contien les distances.
Donc, au final je souhait lors que l'on choisi une ville de départ et une ville d'arrivé , je veux que l'algo calcu le plus cours chemin et le cout.
Exemple
On part de Douai pour aller à Capelle, on devra passer par cambrai, le cout sera de 93 km, je souhaite que ca s'affiche.
Est ce que c'est possible.
Merci
A +