50 líneas
2,4 KiB
Text
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
|
|
|
|
|
|
|
|
|