Bonjour à tous, je n'ai jamais utiliser boost.Graph mais je pense qu'il est approprié pour être utiliser dans mon projet.
J'essaie d'expérimenter un nouvel algorithme de Pathfinding. Voici le principe :
En 2D, si l'on considère que le temps est proportionnel à la distance alors, le chemin le plus court sera toujours :
Soit de A vers B.
Soit de A vers un sommet d'un obstacle puis vers un autre sommet et ensuite vers B.
Donc, lors du chargement d'une carte (par exemple), je précalcule toutes les distances et les chemin pour aller d'un sommet à un autre sommet.
Ensuite, quand t-on demande à aller de A vers B, je tente de A vers B directement et s'il y a un obstacle, je tente d'aller à partir de A vers tous les sommets et à partir de B vers tous les sommets. J'obtiens un algorithme en n² une fois un jeu.
Voici mon problème :
Imaginons 2 obstacles :
Les chemins vert représentent tous les chemins pour aller d'un point à un autre en ligne droite.
Mais il me faut pouvoir charger tous les chemins allant de n'importe quel point à n'importe quel point. Donc par exemple, il me faut calculer le chemin le plus court pour aller de B à H sachant que je fourni une fonction qui calcule le "poids".
Voici ma question : Boost.graph est-il adapté pour, à partir d'un graphe et une fonction calculant le poids entre 2 points du graphe, calculer et conserver le chemin le plus court entre 2 points quelconques du graphes ?
Est-il adapté en performances ?
Mon objectif : pouvoir simplement avec l'aide de boost.graph avoir :
Ensuite, il me suffit de fournir n'importe quelle paire allant d'un point à un autre et j'ai le chemin associé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 struct chemin { std::list<Point> c//Au autre. Poid p; }; std::map<std::pair<Point,Point>, Chemin> Distances;
Merci, j'espère avoir suffisamment explicité mon problème.
N'ayant jamais utiliser les graphes, si vous pouviez me dire quel type de graphe il s'agit, ce serait apprécié.
Partager