경로를 찾기 위해 DFS 구현을 디버깅하는 데 도움을 주셔서 감사합니다. 내 구현은 일반적으로 잘 작동하지만 일정한 경우에는 알고리즘에 의해 방문되는 결과에 여분의 노드가 추가되지만 결과 목록의 다음 노드까지 경로가 존재하지 않기 때문에 솔루션 내에 포함되어서는 안됩니다. 이 문제는 Result.add (nextNode)의 위치에 의해 발생하지만이 버그를 해결할 수 없었습니다.소스에서 대상까지의 경로를 찾는 반복 DFS
문제의 예가 아래에 첨부되어 있습니다 (임의의 가중치). 따라서 알고리즘은 4에서 1까지의 가장자리가 없더라도 [0 2 4 1 3 5]를 결과로 반환합니다.
사람은 4와 같은 노드가 결과를하시기 바랍니다 추가되지 않도록 내 코드를 수정하는 방법을 제안 할 수 있습니다? result
목록에 당신이 visited
목록에 추가 할 때마다 노드를 추가
public static ArrayList<Integer> pathDFS(Integer source, Integer destination, WeightedGraph graph) {
ArrayList<Integer> Result = new ArrayList<Integer>();
ArrayList<Integer> Visited = new ArrayList<Integer>();
Stack<Integer> s = new Stack<>();
s.push(source);
Visited.add(source);
while (!s.isEmpty()) {
Integer v = s.pop();
for (int nextNode : getAdjacentNodes(v, graph)) {
if (!Visited.contains(nextNode)) {
s.push(nextNode);
Visited.add(nextNode);
**Result.add(nextNode);**
if (nextNode == destination)
return Result;
}
}
}
return Result;
}
DFS는 매우 좋은 그래프 순회 알고리즘이 아니기 때문에 문제의 근원 일 수 있습니다. 그것은 당신에게 최고의 솔루션을 제공하기 위해 보장되지 않습니다 따라서 일부 이상한 것들을 생각해 낼 수 있습니다. (그것은 그것이 끝에 도달한다고 생각하기 때문에 그것을 목록에 추가하려고 시도 할 수는 있지만, 그렇지 않다) 나는 각 노드의 선험자를 저장하려고 시도 할 것이다. – Pancax