Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
I
IPF-S3
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Wiki
Wiki externe
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Extraits de code
Déploiement
Releases
Registre de conteneur
Registre de modèles
Surveillance
Incidents
Analyse
Données d'analyse des chaînes de valeur
Analyse des contributeurs
Données d'analyse du dépôt
Expériences du modèle
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté
Contribuer à GitLab
Donner votre avis
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
Loïc DUBARD
IPF-S3
Validations
266ca6a9
Valider
266ca6a9
rédigé
5 years ago
par
Loïc Wikle DUBARD
Parcourir les fichiers
Options
Téléchargements
Correctifs
Plain Diff
debut phase2
parent
73412481
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Modifications
3
Masquer les modifications d'espaces
En ligne
Côte à côte
Affichage de
3 fichiers modifiés
Makefile
+4
-4
4 ajouts, 4 suppressions
Makefile
src/phase1.ml
+1
-2
1 ajout, 2 suppressions
src/phase1.ml
src/phase2.ml
+87
-0
87 ajouts, 0 suppression
src/phase2.ml
avec
92 ajouts
et
6 suppressions
Makefile
+
4
−
4
Voir le fichier @
266ca6a9
...
...
@@ -9,11 +9,11 @@
all
:
phase1 phase2
phase1
:
src/
main
.ml
ocamlc
$^
-o
build/
a
.out
phase1
:
src/
phase1
.ml
ocamlc
$^
-o
build/
phase1
.out
phase2
:
echo
TODO
phase2
:
src/phase2.ml
ocamlc
$^
-o
build/phase2.out
clean
:
rm
-rf
*
.cmi
*
.cmo
...
...
Ce diff est replié.
Cliquez pour l'agrandir.
src/
main
.ml
→
src/
phase1
.ml
+
1
−
2
Voir le fichier @
266ca6a9
(*
* fichier :
main
.ml
* fichier :
phase1
.ml
* auteur : dubard loïc
*)
...
...
@@ -116,7 +116,6 @@ let plus_courts_chemins s p c =
in
remplissage
liste
distances
minimum
(* TODO : ne pas oublier de supprimer les chemins qui n'arrive pas à puits *)
(* test du dénombrement de l'ensemble des chemins possibles *)
let
_
=
...
...
Ce diff est replié.
Cliquez pour l'agrandir.
src/phase2.ml
0 → 100644
+
87
−
0
Voir le fichier @
266ca6a9
(*
* fichier : phase2.ml
* auteur : dubard loïc
*)
(*
* définition du type graphe qui est une map de liste dont les clés sont des string
*)
module
Graphe
=
Map
.
Make
(
String
)
module
Arreteliste
=
Map
.
Make
(
String
)
module
Clesliste
=
Set
.
Make
(
String
)
(*
* @ensures : vérification du nombre d'agruments
* @raises : erreur si le nombre d'aguments est différent de 1
*)
let
_
=
if
Array
.
length
Sys
.
argv
=
1
then
failwith
"Erreur : Veuillez ajouter un nom de fichier !
\n
"
else
if
Array
.
length
Sys
.
argv
>
2
then
failwith
"Erreur : Trop d'arguments !
\n
"
else
Printf
.
printf
"ouverture de : %s
\n
"
Sys
.
argv
.
(
1
)
(*
* @ensures : lit le fichier en entrée
* @raises : fail si le fichier n'est pas trouvé -> "No such file or directory"
*)
let
file
=
open_in
Sys
.
argv
.
(
1
)
let
source
=
input_line
file
let
puits
=
input_line
file
let
n
=
input_line
file
(*
* [make_graphe n]
* @ensures : retourne le "graphe" à n arrètes correspondant au fichier ouvert dans le channel file
*)
let
rec
make_graphe
n
=
let
line
=
input_line
file
in
let
l
=
String
.
split_on_char
'
'
line
in
match
l
with
|
[
a
;
b
;
c
]
->
if
n
=
1
then
(
Graphe
.
add
a
(
Arreteliste
.
add
b
c
Arreteliste
.
empty
)
Graphe
.
empty
)
else
let
g
=
make_graphe
(
n
-
1
)
in
if
(
Graphe
.
mem
a
g
)
then
let
l
=
Graphe
.
find
a
g
in
let
f
=
Graphe
.
remove
a
g
in
Graphe
.
add
a
(
Arreteliste
.
add
b
c
l
)
f
else
Graphe
.
add
a
(
Arreteliste
.
add
b
c
Arreteliste
.
empty
)
g
|
_
->
failwith
(
"erreur dans le graphe !"
)
(*
* [liste_sommets g]
* @ensures : la listes des clés de la liste d'arrete g
*)
let
liste_sommets
g
=
let
f
k
v
a
=
k
::
a
in
Arreteliste
.
fold
f
g
[]
(*
* [chemins s g] donne la liste de tous les chemins du graphe g partants de s, un chemin étant une liste de sommets
*)
let
rec
chemins
s
g
=
if
(
Graphe
.
mem
s
g
)
then
let
ng
=
Graphe
.
remove
s
g
in
(*[f a] retourne la liste des chemins depuis a dans le graphe sans s *)
let
f
a
=
let
l
=
chemins
a
ng
in
(
List
.
map
(
fun
b
->
if
(
List
.
mem
a
b
)
then
b
else
a
::
b
)
l
)
in
let
toto
=
Graphe
.
find
s
g
in
let
tata
=
liste_sommets
toto
in
let
titi
=
List
.
concat
(
List
.
map
f
tata
)
in
List
.
map
(
fun
b
->
if
(
List
.
mem
s
b
)
then
b
else
s
::
b
)
titi
else
[[
s
]]
(*
* [filtre f t nl] pour une liste de chemins nl renvois uniquement la liste des chemins partants de f et arrivants à t
* un chemin étant une liste de sommets
*)
let
rec
filtre
f
t
nl
=
match
nl
with
|
[]
->
[]
|
elt
::
ma
->
if
(
List
.
nth
elt
0
)
=
f
&&
(
List
.
nth
elt
((
List
.
length
elt
)
-
1
))
=
t
then
elt
::
(
filtre
f
t
ma
)
else
(
filtre
f
t
ma
)
\ No newline at end of file
Ce diff est replié.
Cliquez pour l'agrandir.
Aperçu
0%
Chargement en cours
Veuillez réessayer
ou
joindre un nouveau fichier
.
Annuler
You are about to add
0
people
to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Enregistrer le commentaire
Annuler
Veuillez vous
inscrire
ou vous
se connecter
pour commenter