Paul Faure 3 years ago
parent
commit
55a14c0333
3 changed files with 153 additions and 0 deletions
  1. 20
    0
      TP1-2/tp2_3.pl
  2. 44
    0
      TP1-2/tp2_4.pl
  3. 89
    0
      TP3/tp3.pl

+ 20
- 0
TP1-2/tp2_3.pl View File

@@ -0,0 +1,20 @@
1
+a_droite(X, [X | D], D).
2
+% not(a_droite(X,[],_)).
3
+
4
+
5
+a_droite(X, [_ | Tail], D) :-
6
+	a_droite(X,Tail,D).
7
+
8
+a_gauche(X, [X | _], []).
9
+
10
+a_gauche(X, [Head | Tail], [HeadG | TailG]) :-
11
+	Head = HeadG,
12
+	a_gauche(X, Tail, TailG).
13
+
14
+
15
+separer(Head,[Head | Tail], [], Tail).
16
+
17
+separer(X,[Head | Tail], [Head | Aux], D) :-
18
+	separer(X,Tail,Aux, D).
19
+	
20
+

+ 44
- 0
TP1-2/tp2_4.pl View File

@@ -0,0 +1,44 @@
1
+	% Description de graphes
2
+	% ----------------------
3
+	% Chaque clause donne le nom du graphes, la liste des sommets et la liste des arcs.
4
+	% g1 est un graphe acyclique
5
+	% g2 contient des cycles
6
+	
7
+
8
+graphe(g1, [1,2,3,4,5,6], [[1,2],[1,3],[2,4],[3,4],[4,5],[4,6]]).
9
+
10
+graphe(g2, [1,2,3,4,5,6], [[1,2],[1,3],[2,3],[2,4],[3,4],[4,1],[4,5],[4,6]]).
11
+
12
+
13
+arc(G,O,E) :-
14
+	graphe(G,Nodes,Arcs),
15
+	member(O,Nodes),
16
+	member(E,Nodes),
17
+	member([O,E],Arcs).
18
+
19
+existe_chemin(G,O,E) :- 
20
+	arc(G,O,E).
21
+
22
+existe_chemin(G,O,E) :-
23
+	arc(G,O,Aux),
24
+	existe_chemin(G,Aux,E).
25
+
26
+chemin(G,O,E,[[O,E]]) :-
27
+	arc(G,O,E).
28
+
29
+chemin(G,O,E,[[O,Aux] | Ch]) :-
30
+	arc(G,O,Aux),
31
+	chemin(G,Aux,E,Ch).
32
+
33
+chemin_sans_circuits(G,O,E,[[O,E]],Memo) :-
34
+	arc(G,O,E),
35
+	not(member(E,Memo)).
36
+
37
+
38
+chemin_sans_circuits(G,O,E,[[O,Aux] | Ch],Memo) :-
39
+	arc(G,O,Aux),
40
+	not(member(Aux,Memo)),
41
+	chemin_sans_circuits(G,Aux,E,Ch,[Aux | Memo]).
42
+
43
+
44
+

+ 89
- 0
TP3/tp3.pl View File

@@ -0,0 +1,89 @@
1
+:- use_module(library(lists)).
2
+
3
+disque(a, [-1,0,0,0,0,0]).
4
+disque(b, [-1,-1,0,0,0,0]).
5
+disque(c, [-1,0,-1,0,0,0]).
6
+disque(d, [-1,0,0,-1,0,0]).
7
+disque(e, [-1,-1,-1,0,0,0]).
8
+disque(f, [-1,-1,0,-1,0,0]).
9
+disque(g, [-1,0,-1,0,-1,0]).
10
+disque(h, [-1,-1,-1,-1,0,0]).
11
+disque(i, [-1,-1,-1,0,-1,0]).
12
+disque(j, [-1,-1,0,-1,-1,0]).
13
+disque(k, [-1,-1,-1,-1,-1,0]).
14
+disque(l, [-1,-1,-1,-1,-1,-1]).
15
+
16
+liste_des_disques(L) :-
17
+    findall(X,disque(X,_),L).
18
+
19
+
20
+% rotation_droite([Head | []],[Head]).
21
+
22
+/* rotation_droite([Head | Tail], R) :-
23
+   rotation_droite(Tail, RAux),
24
+   append(RAux,[Head], R). */
25
+
26
+rev([], []).
27
+
28
+rev([Head | Tail], Res) :-
29
+    rev(Tail, X),
30
+    append(X, [Head],Res).
31
+    
32
+/* rotation_droite(M, [Head | R]) :-
33
+    rev(M, [Head | Tail]),
34
+    rev(Tail, R). */
35
+
36
+rotation_droite([Head | Tail], Res) :-
37
+    append(Tail, [Head], Res).
38
+
39
+orienter(M1,M1,0,_).
40
+
41
+orienter(M1,M2,N,Ref) :-
42
+    rotation_droite(M1,Aux),
43
+    Aux \= Ref,
44
+    orienter(Aux,M2,Naux,Ref),
45
+    N is Naux + 1.
46
+
47
+
48
+empilement_secteur(0,0,0).
49
+empilement_secteur(2,-1,1).
50
+empilement_secteur(0,-1,2).
51
+empilement_secteur(1,-1 ,0).
52
+
53
+empilement([], [], []).
54
+
55
+empilement([Head1 | Tail1], [HeadM | TailM], [Head2 | Tail2]) :-
56
+    empilement_secteur(Head1,HeadM,Head2),
57
+    empilement(Tail1,TailM,Tail2).
58
+
59
+etat_initial([[0,0,0,0,0,0], L]) :-
60
+    liste_des_disques(L).
61
+
62
+etat_final([[0,0,0,0,0,0], []]).
63
+
64
+arc([S1,L1],[S2, L2],[D,N]) :-
65
+    S1 = [0,0,0,0,0,0],
66
+	N = 0,
67
+    select(D, L1, L2),
68
+    disque(D, F),
69
+    orienter(F,F2,N,F),
70
+    empilement(S1,F2,S2).
71
+
72
+arc([S1,L1],[S2, L2],[D,N]) :-
73
+    S1 \= [0,0,0,0,0,0],
74
+    select(D, L1, L2),
75
+    disque(D, F),
76
+    orienter(F,F2,N,F),
77
+    empilement(S1,F2,S2).
78
+
79
+trouver_solution([], EtatFinal, EtatFinal).
80
+
81
+trouver_solution([ResAux1 | ResAux2], EtatCourant, EtatFinal) :-
82
+    arc(EtatCourant, EtatSuivant, ResAux1),
83
+    trouver_solution(ResAux2,  EtatSuivant, EtatFinal).
84
+
85
+
86
+solution(S) :-
87
+    etat_initial(EtatInit),
88
+    etat_final(EtatFinal),
89
+    trouver_solution(S,EtatInit,EtatFinal).

Loading…
Cancel
Save