2017-11-16 14 views
0

나는 미로를 해결하는 데 필요한 동작을 지적하기 위해 DFS 알고리즘을 사용했습니다. startVertexendVertex이 있습니다. 주변의 모든 이웃이 탐구 따라서 특정 정점은 아무 소용이 남아되었을 때 나는 removeLast() 기능을 사용하고미로 해결 알고리즘에 어떤 문제가 있습니까?

private void DFS(int vertex, boolean visited[], LinkedList<Move> output) { 

    visited[vertex] = true; 

    for (int neighbor: g.neighbors(vertex)) { 
     if (visited[neighbor] != true) { 
      if (neighbor == vertex + 1) 
       output.add(Move.RIGHT); 
      else if (neighbor == vertex - 1) 
       output.add(Move.LEFT); 
      else if (neighbor == vertex + Math.sqrt(g.size())) 
       output.add(Move.DOWN); 
      else 
       output.add(Move.UP); 
      if (neighbor == endVertex) 
       break; 
      DFS(neighbor, visited, output); 
     } 
     else { 
      output.removeLast(); 
     } 
    } 
} 

다음과 같이 내 코드입니다. 그러나 나는 그 오류가 거기에만 있다고 생각한다.

그래프의 크기는 은 n*n입니다. 원래 미로는 n 행과 n 열이있는 2D 정사각형이기 때문입니다.

  • output.removeLast이

  • 휴식을 output.add 대칭이어야한다 만 안쪽 잎 DFS를 떠나 (그리고 endVertex가 발견되지 않은) 경우

  • +0

    'g.neighbors (정점)에서 중지 할 수 있습니다 알 수 있도록 당신은 아마, DFS는 endVertex이 발견되었는지 여부를 다시 표시 할'-'g'는 정의되어 있지 않습니다 코드에서, 추측 작업이 필요합니다. 보다 효율적이고 효과적인 도움을 받으려면 [mcve] – c0der

    답변

    0
    • 당신은 방문 지워야 고리. 너가 원하는게 그거야?

    • 당신이 검색이 상위 계층