Bonjour à tous, voilà j'ai un exo, que je ne comprends pas :
Donc par exemple quand je fais plus_courte_route(a,b,L,D), et bien ça m'affiche
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 relie(a,f,5). relie(a,c,4). relie(a,b,7). relie(a,g,3). relie(b,e,2). relie(b,c,5). relie(c,b,3). relie(c,a,8). relie(c,d,2). relie(c,h,8). relie(d,e,4). relie(d,h,4). relie(e,h,7). relie(e,f,4). relie(f,g,9). relie(g,h,11). route(X,X,_,[],0). route(X,Y,D,[Z|L],K):- relie(X,Z,DIS1), not(appartient(Z,D)), route(Z,Y,[Z|D],L,DIS2), K is DIS1+DIS2. appartient(X,[X|_]). appartient(X,[_|Y]):- appartient(X,Y). plus_courte_route(DEP,ARR,L,D):- plus_courte_route_1(DEP,ARR,[],L,D). plus_courte_route_1(DEP,ARR,INT,[DEP|L],D):- findall(E,route(DEP,ARR,INT,_,E),K), recherche_plus_petit(K,D), route(DEP,ARR,INT,L,D). recherche_plus_petit([X],X). recherche_plus_petit([X,Y|Z],R) :- X =< Y, recherche_plus_petit([X|Z],R) ; X > Y, recherche_plus_petit([Y|Z],R).
Donc le programme fonctionne bien mais j'ai du mal à saisir son fonctionnement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 L = [a, c, b], D = 7
L serait la liste des villes par laquelle il faut passer et D leur distances.
quand vous voyez INT c'est une liste de villes interdites (pas encore utilisé)...
Déjà je comprend pas pourquoi on faitalors qu'au final on déclare ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part plus_courte_route_1(DEP,ARR,[],L,D)Donc INT aura comme "valeur" toujours une liste vide oO...
Code : Sélectionner tout - Visualiser dans une fenêtre à part plus_courte_route_1(DEP,ARR,INT,[DEP|L],D)
et aussiva créer une liste K et pour ça utiliser route, mais le DEP utilisé dans route, c'est lequel ? on a un DEP tout seul, et un [DEP|L] et qui donc serait le premier élément de la liste L, mais qui ne vaut rien... enfin j'y comprend plus rien =____=
Code : Sélectionner tout - Visualiser dans une fenêtre à part findall(E,route(DEP,ARR,INT,_,E),K)
Merci d'avance
Partager