0
나는 미로를 해결하는 데 필요한 동작을 지적하기 위해 DFS 알고리즘을 사용했습니다. startVertex
및 endVertex
이 있습니다. 주변의 모든 이웃이 탐구 따라서 특정 정점은 아무 소용이 남아되었을 때 나는 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가 발견되지 않은) 경우
'g.neighbors (정점)에서 중지 할 수 있습니다 알 수 있도록 당신은 아마, DFS는 endVertex이 발견되었는지 여부를 다시 표시 할'-'g'는 정의되어 있지 않습니다 코드에서, 추측 작업이 필요합니다. 보다 효율적이고 효과적인 도움을 받으려면 [mcve] – c0der