경로 찾기 알고리즘은 컴퓨터 그래픽 및 인공 지능 분야에서 일반적으로 사용되는 알고리즘 중 하나로, 한 지점에서 다른 지점까지 최단 경로 또는 최적 경로를 계산하는 데 사용됩니다. 이번 글에서는 일반적으로 사용되는 두 가지 길찾기 알고리즘인 Dijkstra 알고리즘과 A* 알고리즘
Dijkstra 알고리즘은 그래프에서 두 점 사이의 최단 경로를 찾는 데 사용되는 폭 방법입니다. 검색 알고리즘. 이는 다음과 같이 작동합니다:
최단 경로를 찾은 정점을 저장하려면 집합 S를 만들어야 합니다
아직 최단 경로를 찾지 못한 정점을 저장하려면 집합 Q를 만들어야 합니다
초기화 시 거리 배열 dist를 사용할 때 시작점에서 다른 점까지의 거리는 무한대로, 시작점에서 자신까지의 거리는 0
설정될 때까지 다음 단계를 반복해야 합니다. Q는 비어 있습니다:
마지막으로 dist 배열은 시작점에서 각 정점까지의 최단 경로를 저장합니다.
다음은 C#으로 작성된 Dijkstra 알고리즘의 소스 코드입니다.
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>A 알고리즘</span></h4><p><span>A 알고리즘은 그래프에서 두 점 사이의 최단 경로를 찾는 데 사용되는 경험적 검색 알고리즘입니다. 알고리즘의 아이디어는 다음과 같습니다. </span></p><p><span>탐색할 정점을 저장하기 위해 우선순위 대기열 openSet을 생성합니다.</span></p><p><span>시작점부터 각 정점까지의 실제 비용을 저장하려면 gScore라는 배열을 만들어야 합니다. vertex</span></p><p> <span>시작점부터 목표점까지의 예상 비용을 저장하기 위해 fScore라는 배열을 만들어야 합니다</span></p><p><span>openSet에 시작점을 추가하고 gScore[start]를 0으로 설정하고 fScore[start를 설정합니다. ] ~ 0 시작점에서 목표점까지의 예상 비용 </span></p><p><span> openSet이 빌 때까지 다음 단계를 반복합니다. </span></p>
openSet이 비어 있으면 목표 지점에 도달할 수 없다는 의미이며 null 값이 반환됩니다.
다음은 Java로 작성된 A* 알고리즘의 소스 코드입니다.
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>
위는 Dijkstra의 알고리즘과 A*의 알고리즘을 비교한 것입니다. C#이나 Java로 구현된 알고리즘 아이디어, 프로세스 및 소스 코드를 포함하여 알고리즘에 대한 자세한 소개입니다. 이 두 가지 알고리즘은 일반적으로 사용되는 길찾기 알고리즘으로 특정 필요에 따라 선택하여 사용할 수 있습니다.
물론 오늘날의 도시에서는 내비게이션 소프트웨어가 우리를 위해 계획을 세울 수 있습니다.
위 내용은 길 찾기 알고리즘의 경로 계획 분석 및 코드 구현에 대해 논의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!