L'algorithme de recherche de chemin est l'un des algorithmes couramment utilisés dans le domaine de l'infographie et de l'intelligence artificielle, utilisé pour calculer le chemin le plus court ou le chemin optimal d'un point à un autre. Dans cet article, je présenterai en détail deux algorithmes de recherche de chemin couramment utilisés : l'algorithme de Dijkstra et l'algorithme A*
L'algorithme de Dijkstra est une méthode de largeur utilisée pour trouver le chemin le plus court entre deux points dans un graphe. algorithme de recherche. Cela fonctionne comme suit :
Nous devons créer un ensemble S pour stocker les sommets qui ont trouvé le chemin le plus court
Nous devons créer un ensemble Q pour stocker les sommets qui n'ont pas encore trouvé le chemin le plus court
Lors de l'initialisation Lorsque vous utilisez le tableau de distance dist, vous devez définir la distance du point de départ aux autres points à l'infini et la distance du point de départ à lui-même à 0
Répétez les étapes suivantes jusqu'à ce que l'ensemble soit défini. Q est vide :
Enfin, le tableau dist stocke le chemin le plus court du point de départ à chaque sommet
Ce qui suit est le code source de l'algorithme de Dijkstra écrit en C# :
class DijkstraAlgorithm { private int[,] graph; private int size; public DijkstraAlgorithm(int[,] graph) { this.graph = graph; this.size = graph.GetLength(0); } public int[] FindShortestPath(int start, int end) { int[] dist = new int[size]; bool[] visited = new bool[size]; for (int i = 0; i <h4><span>Un algorithme</span></h4><p><span>A L'algorithme est un algorithme de recherche heuristique utilisé pour trouver le chemin le plus court entre deux points d'un graphique. L'idée de l'algorithme est la suivante : </span></p><p><span>Créer une file d'attente prioritaire openSet pour stocker les sommets à explorer</span></p><p><span>Nous devons créer un tableau nommé gScore pour stocker le coût réel du point de départ à chacun vertex</span></p><p> <span>Nous devons créer un tableau nommé fScore pour stocker le coût estimé du point de départ au point cible</span></p><p><span>Ajoutez le point de départ à openSet, définissez gScore[start] sur 0 et définissez fScore[start ] à 0 Coût estimé du point de départ au point cible </span></p><p><span> Répétez les étapes suivantes jusqu'à ce que openSet soit vide : </span></p>
Si openSet est vide, cela signifie que le point cible ne peut pas être atteint et qu'une valeur nulle est renvoyée
Voici le code source de l'algorithme A* écrit en Java :
import java.util.*;class AStarAlgorithm {private int[][] graph;private int size;public AStarAlgorithm(int[][] graph) {this.graph = graph;this.size = graph.length;}public List<integer> findShortestPath(int start, int end) {PriorityQueue<node> openSet = new PriorityQueue();int[] gScore = new int[size];int[] fScore = new int[size];int[] cameFrom = new int[size];boolean[] visited = new boolean[size];Arrays.fill(gScore, Integer.MAX_VALUE);Arrays.fill(fScore, Integer.MAX_VALUE);Arrays.fill(cameFrom, -1);gScore[start] = 0;fScore[start] = heuristicCostEstimate(start, end);openSet.offer(new Node(start, fScore[start]));while (!openSet.isEmpty()) {int current = openSet.poll().index;if (current == end) {return reconstructPath(cameFrom, current);}visited[current] = true;for (int neighbor = 0; neighbor reconstructPath(int[] cameFrom, int current) {List<integer> path = new ArrayList();path.add(current);while (cameFrom[current] != -1) {current = cameFrom[current];path.add(0, current);}return path;}private class Node implements Comparable<node> {public int index;public int fScore;public Node(int index, int fScore) {this.index = index;this.fScore = fScore;}@Overridepublic int compareTo(Node other) {return Integer.compare(this.fScore, other.fScore);}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null || getClass() != obj.getClass()) {return false;}Node other = (Node) obj;return index == other.index;}@Overridepublic int hashCode() {return Objects.hash(index);}}}</node></integer></node></integer>
Ce qui précède est une comparaison de l'algorithme de Dijkstra et d'A* Introduction détaillée de l'algorithme, y compris les idées d'algorithme, les processus et le code source implémentés en C# ou Java. Ces deux algorithmes sont des algorithmes de recherche de chemin couramment utilisés et peuvent être sélectionnés et utilisés en fonction de besoins spécifiques.
Bien sûr, dans les villes d’aujourd’hui, les logiciels de navigation peuvent planifier les choses pour nous.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!