a * pathFinding, 구현이 제대로 작동하지 않습니까? 어떤 제안?

스머프 MT

안녕하세요 저는 맨해튼 거리를 비용으로 사용하는 a * 경로 찾기를 구현하고 있습니다. 여기에 검색 코드가 있습니다.

 public LinkedList<MapNode> search(MapNode startNode, MapNode goalNode) {

    LinkedList<MapNode> closedList = new LinkedList<MapNode>();
    LinkedList<MapNode> openList = new LinkedList<MapNode>();

    openList.add(startNode);

    startNode.setPathParent(null);

    while (!openList.isEmpty()) {
        MapNode node = (MapNode) openList.removeFirst();

        if (node == goalNode) 
            return constructPath(goalNode);

        else {
            closedList.add(node);

            // add neighbors to the open list
            Iterator<MapNode> i = getNeighbours(node, goalNode).iterator();

            while (i.hasNext()) {
                MapNode neighborNode = (MapNode) i.next();

                if (!closedList.contains(neighborNode) && !openList.contains(neighborNode)) {
                        neighborNode.setPathParent(node);
                        openList.add(neighborNode);

                }
            }
        }
    }
    // no path found
    return null;
}

getneighbours()방법은 다음 같습니다.

public LinkedList<MapNode> getNeighbours(MapNode node, MapNode goalNode) {

    Position positionCheck = new Position(0, 0);

    for (int x = -1; x < 2; x++){

        int newX = node.getPosition().getPositionX() + x;
        if(newX<0 || newX >= Map.DIMENSION){continue;}

        for (int y = -1; y < 2; y++){

            int newY = node.getPosition().getPositionY() + y;
            if(newY<0 || newY >= Map.DIMENSION){continue;}

            positionCheck.setPositionX(newX);
            positionCheck.setPositionY(newY);

            if(!node.getPosition().equals(positionCheck)){
                calculateCost(map.elementAt(positionCheck), goalNode);

                neighbours.add(map.elementAt(positionCheck));
            }
        }

    }   

    return neighbours;
}

작동하지만 불행히도 맨해튼 원칙을 사용하지 않는 출력은 다음과 같습니다.

 Shortest Delivery Point is: 6 miles! - 8,7 // using manhattan distance
 S = Start, D=Destination, "."= path taken.


 [3,4] ->
 [4,3] ->
 [5,4] ->
 [6,5] ->
 [ D ] ->

 [0,0]  [0,1]  [0,2]  [0,3]  [0,4]  [0,5]  [0,6]  [0,7] 
 [1,0]  [1,1]  [1,2]  [1,3]  [1,4]  [1,5]  [1,6]  [1,7] 
 [2,0]  [2,1]  [2,2]  [2,3]  [2,4]  [ S ]  [2,6]  [2,7] 
 [3,0]  [3,1]  [3,2]  [3,3]  [ . ]  [3,5]  [3,6]  [3,7] 
 [4,0]  [4,1]  [4,2]  [ . ]  [4,4]  [4,5]  [4,6]  [4,7] 
 [5,0]  [5,1]  [5,2]  [5,3]  [ . ]  [5,5]  [5,6]  [5,7] 
 [6,0]  [6,1]  [6,2]  [6,3]  [6,4]  [ . ]  [6,6]  [6,7] 
 [7,0]  [7,1]  [7,2]  [7,3]  [7,4]  [7,5]  [ D ]  [7,7] 

나는 누군가가 내가 할 수없는 것을 발견 할 수 있는지 궁금해했습니다. 처음으로 길 찾기를 엉망으로 만들었으므로 조금 나이가 들었습니다. 도와 주셔서 감사합니다..

해롤드

공개 목록에서 제거하는 노드는 F 비용이 가장 작은 노드 여야합니다. 따라서 연결 목록을 사용하는 것은 잘못된 선택입니다. 노드를 추출하려면 완전히 검색해야하거나 노드를 삽입하려면 완전히 검색해야합니다. 하지만, 나쁜 선택이든 아니든, 당신은 둘 다하지 않기 때문에 이렇게 옳지 않습니다.

또한 이웃이 이미 열려있는 목록에있는 경우 G 점수를 비교하고 새 경로가 더 나은 경우 다시 부모로 지정해야합니다.

닫힌 집합에 연결 목록을 사용하는 것도 나쁜 선택입니다. "추가"와 "포함"만 필요하며 연결 ​​목록에 포함은 끔찍합니다. 그래도 정확성에는 영향을 미치지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 strcpy 구현이 제대로 작동하지 않습니다.

분류에서Dev

이미지와 js가 작동하지 않지만 기본 폴더 외부에서 작동합니다. 어떤 제안을 할 수 있습니까?

분류에서Dev

데이터 어레이가 제대로 작동하지 않습니까?

분류에서Dev

Red Black Tree-fixTree 구현이 제대로 작동하지 않습니다.

분류에서Dev

BFS 구현이 제대로 작동하지 않음

분류에서Dev

glDrawArrays가 어떤 이유로 작동하지 않습니까?

분류에서Dev

내 IF 문이 제대로 작동하지 않습니다.이 문제를 어떻게 해결합니까?

분류에서Dev

어떤 경우에는 PHP "str_replace"가 제대로 작동하지 않습니까?

분류에서Dev

내 코드에 어떤 문제가 있습니까? (두 번째 on (클릭) 기능이 작동하지 않음)

분류에서Dev

이 database.sql이 제대로 작동하지 않습니까?

분류에서Dev

uniq 명령이 제대로 작동하지 않습니까?

분류에서Dev

Pandas groupby.sum ()이 제대로 작동하지 않습니까?

분류에서Dev

uniq 명령이 제대로 작동하지 않습니까?

분류에서Dev

sstream이 제대로 작동하지 않습니까?

분류에서Dev

rails 4 : 조상이 제대로 작동하지 않습니까?

분류에서Dev

GridBagLayout이 제대로 작동하지 않습니까?

분류에서Dev

nvarchar와 같이 제대로 작동하지 않습니까?

분류에서Dev

Trim ()이 제대로 작동하지 않습니까?

분류에서Dev

document.getElementsByClassName ()이 제대로 작동하지 않습니까?

분류에서Dev

하드웨어 가속이 제대로 작동하지 않습니다.

분류에서Dev

보안 문자 새로 고침이 제대로 작동하지 않습니다.

분류에서Dev

이 strlen () 구현에 어떤 문제가 있습니까?

분류에서Dev

sessionToken이 제대로 구현되었는지 어떻게 알 수 있습니까?

분류에서Dev

$ _SESSION 기반 언어 선택이 제대로 작동하지 않습니다.

분류에서Dev

$ _SESSION 기반 언어 선택이 제대로 작동하지 않습니다.

분류에서Dev

레이어 마스크가 제대로 작동하지 않습니다.

분류에서Dev

jQuery 클릭 이벤트가 제대로 작동하지 않습니까? 어떻게 써야하나요?

분류에서Dev

Ubuntu에서 회의로 이동 : 가능하며 그렇지 않은 경우 어떤 대안이 있습니까?

분류에서Dev

Mongoid 다 대다 관계가 작동하지 않습니다. 내 모델에 어떤 문제가 있습니까?

Related 관련 기사

  1. 1

    내 strcpy 구현이 제대로 작동하지 않습니다.

  2. 2

    이미지와 js가 작동하지 않지만 기본 폴더 외부에서 작동합니다. 어떤 제안을 할 수 있습니까?

  3. 3

    데이터 어레이가 제대로 작동하지 않습니까?

  4. 4

    Red Black Tree-fixTree 구현이 제대로 작동하지 않습니다.

  5. 5

    BFS 구현이 제대로 작동하지 않음

  6. 6

    glDrawArrays가 어떤 이유로 작동하지 않습니까?

  7. 7

    내 IF 문이 제대로 작동하지 않습니다.이 문제를 어떻게 해결합니까?

  8. 8

    어떤 경우에는 PHP "str_replace"가 제대로 작동하지 않습니까?

  9. 9

    내 코드에 어떤 문제가 있습니까? (두 번째 on (클릭) 기능이 작동하지 않음)

  10. 10

    이 database.sql이 제대로 작동하지 않습니까?

  11. 11

    uniq 명령이 제대로 작동하지 않습니까?

  12. 12

    Pandas groupby.sum ()이 제대로 작동하지 않습니까?

  13. 13

    uniq 명령이 제대로 작동하지 않습니까?

  14. 14

    sstream이 제대로 작동하지 않습니까?

  15. 15

    rails 4 : 조상이 제대로 작동하지 않습니까?

  16. 16

    GridBagLayout이 제대로 작동하지 않습니까?

  17. 17

    nvarchar와 같이 제대로 작동하지 않습니까?

  18. 18

    Trim ()이 제대로 작동하지 않습니까?

  19. 19

    document.getElementsByClassName ()이 제대로 작동하지 않습니까?

  20. 20

    하드웨어 가속이 제대로 작동하지 않습니다.

  21. 21

    보안 문자 새로 고침이 제대로 작동하지 않습니다.

  22. 22

    이 strlen () 구현에 어떤 문제가 있습니까?

  23. 23

    sessionToken이 제대로 구현되었는지 어떻게 알 수 있습니까?

  24. 24

    $ _SESSION 기반 언어 선택이 제대로 작동하지 않습니다.

  25. 25

    $ _SESSION 기반 언어 선택이 제대로 작동하지 않습니다.

  26. 26

    레이어 마스크가 제대로 작동하지 않습니다.

  27. 27

    jQuery 클릭 이벤트가 제대로 작동하지 않습니까? 어떻게 써야하나요?

  28. 28

    Ubuntu에서 회의로 이동 : 가능하며 그렇지 않은 경우 어떤 대안이 있습니까?

  29. 29

    Mongoid 다 대다 관계가 작동하지 않습니다. 내 모델에 어떤 문제가 있습니까?

뜨겁다태그

보관