문제 :경로 찾는 알고리즘 어려움
우리가 적은 회전에 최적화 된 A * 알고리즘을 수정합니다. 가능한 경우 알고리즘은 을 (x, 1) 또는 (x-1, y)가 선호하는 (a, b)에서 ANY TILE ADJACENT TO (x, y)까지의 경로로 찾습니다.
내 시도 용액 :
- 실행에서 원래 A * 알고리즘 (a, b)에 대한 (X, Y).
- (x-1, ) 또는 (x + 1,)을 통과하는 경로의 마지막 좌표를 찾습니다.
- 해당 좌표계에서 *에서 y까지 직선으로 접근 할 수있는 수직선이있는 경우 해당 선을 따라가는 경로를 수정하십시오.
비주얼 데모 :
......S .....S
. X . X
. => .
. .
E E.
그러나 내 솔루션은 어떤 경우에 작동 것이라고 모르겠어요 (X 액세스 할 수없는 경우 S에서 경로 전자합니다) 예 :
......S .....S
. X . X
.X ??? X.
. .
E E..
누구나이 문제에 대한 해결책을 생각할 수 있습니까?
참고 : A * 알고리즘은 방향 변경 횟수를 고려하여 결과 경로의 회전 횟수를 줄이는 것을 제외하고는 일반적입니다.
"가능한 경우 선호"는 무엇을 의미합니까? (x + 1, y)와 (x, y + 1)에 길이가 같은 경로가 있으면 (x + 1, y) 로의 경로를 찾아야한다는 것을 의미합니까? 또는 (x + 1, y)에 대한 경로가있는 경우에도 더 길어도 발견해야한다는 뜻입니까? 또한 인접한 의미는 무엇입니까? (x + 1, y + 1)은 인접합니까? – btilly
가능한 경우 최단 경로 인 경우에만 이점이 제공됩니다. 인접은 대각선을 포함하지 않습니다. –
제 친구가 제안했습니다 : 1. 반환 된 경로가 마지막으로 x + 1 또는 x-1 평면을 통과하는지 확인합니다. 2. 시작부터 (x + 1, y) 또는 (x-1, y) 중 어느 쪽이 더 가깝 든간에 A *를 실행하십시오. 결과 경로가 더 짧으면 대신 리턴하십시오. 이것은 지금까지 테스트 한 바에 따라 올바른 해결책을 제시하는 것 같지만 기본적으로 알고리즘을 두 번 실행해야합니다. 더 우아한 것이 있으면 호기심. –