Graphes_REES_KOUTSODIMA/be-graphes-algos/src/main/java/org/insa/graphs/algorithm/marathon.txt
2023-05-10 09:34:05 +02:00

50 líneas
2,4 KiB
Text

problème ouvert
marathon: 42,195 kilomètres
contraintes :
- on ne peut pas passer par le même sommet plusieurs fois
- on ne peut pas passer par le même arc plus d'une fois
- on ne peut pas passer par les petites rues (pour avoir assez de place) = pas à implémenter dans l'algorithme, à vérifier avant : on suppose que, sur le graphe, les petites rues ne sont pas affichées
- vérifier le roadType de chaque arc : ne pas accepter PEDESTRIAN, CYCLEWAY, TRUNK et TRACK
- on doit vérifier que la distance entre le point de départ et le point d'arrivée ne dépasse pas les 3km (distance max acceptable)
- on doit définir une zone (autour du point de départ) contenant tous les sommets acceptables (où le marathon peut passer). Cette zone est représentée par un cercle de rayon 24 km (car 21km qui est envirion la moitié du marathon +3 car on peut avoir un point d'arrivée jusqu'à 3km du point de départ) et de centre le point de départ.
- on vérifie que tous les sommets du marathon se situent à l'intérieur de cette zone
- chaque sommet doit avoir une zone (autour de lui) de sommets voisins acceptables. Cette zone doit contenir tous les sommets de distance inférieure ou égale à 4 km par rapport au sommet précédent.
- on ne peut pas avoir des arcs qui se croisent
- on ne peut pas avoir d'obstacles sur le chemin
- on ne peut pas avoir de grosses montées ou descentes
1er algo: on considère qu'on connait le point de départ et le point d'arrivée
ALGO
int dist_done = 0; //distance déja effectuée depuis le point de départ
liste_deja_visite //liste avec sommets déjà visités (au début elle ne contient que l'origine)
//on appelle origine le point de départ et dest le point de destination
zone //zone des arcs acceptables pour chaque sommet. Par exemple zone[k] donne tous les arcs acceptables en partant du sommet k.
//x est le sommet qu'on est en train de traiter
//suc est l'arc successeur
for suc in zone[x] loop
if suc.roadType==PEDESTRIAN or suc.roadType==CYCLEWAY or suc.roadType==TRUNK or suc.roadType==TRACK then
//on lève une exception et on affiche un message qui dit que cette rue n'est pas acceptable car elle est très petite
end if
for i in liste_deja_visite loop
if x==i then
//on lève une exception et on affiche un message pour dire que le sommet a déjà été visité
end if
end loop
if x==dest then
//on est arrivé à la destination