그래프에 DFS를 실행하는 코드를 작성하고 있지만 그래프가 큽니다. 그러나 DFS에서 스택 오버플로 오류가 발생하지만 다른 사람들은 아무 문제없이 DFS 방문을 실행할 수있었습니다. StackOverFlow 오류가 발생하는 이유는 무엇입니까? 나는 더 많은 메모리를 할당하려고했는데 (16GB RAM을 가졌다.) 그러나 1GB RAM을 사용하고있다.StackOverflowError -java
public void DFSVisit(Graph <String, String> graph, String current, int [] data, StackObject [] finish, boolean complicated){
//data stores the time
data[9]++;
graph.setAnnotation(current, "time", data[9]);
graph.setAnnotation(current, "color", "gray");
Iterator <ArrayList<String>> itr = graph.outAdjacentVertices(current);
ArrayList <String> currentlist = null;
String adjacent;
while(itr.hasNext()){
currentlist = itr.next();
adjacent = currentlist.get(1);
if(graph.getAnnotation(adjacent, "color").equals("white")){
graph.setAnnotation(adjacent, "parent", current);
DFSVisit(graph, adjacent, data, finish, complicated);
}
}
graph.setAnnotation(current, "color", "black");
data[9]++;
graph.setAnnotation(current, "done", data[9]);
finish[0].done.push(current);
//System.out.println(current);
}
검색 공간이 무한하다면 코드를 실행하는 모든 시스템에서이 예외가 발생합니다. – mok
현재 노드를 방문한 것으로 표시해야 인접한 버텍스 목록에서 돌아 가지 않습니다. 두 개의 꼭지점과 그 꼭지점이 결합 된 간단한 그래프를 상상해보십시오. 인접한 두 꼭지점은 서로를 포함 할 것이고 알고리즘은 그것들을 계속해서 반복해서 방문 할 것입니다. – anonymous