Я пытаюсь сделать первый поиск глубины в Java рекурсивно. На данный момент код проходит через мой график отлично, но он никогда не возвращается, чтобы найти маршрут, когда у них больше нет узлов для посещения. Честно говоря, у меня есть блок менталитета. Каким будет лучший способ вернуться к родительскому узлу?Глубина первого поиска в java - как вернуться к родительскому узлу?
Вот мой код до сих пор:
private final Map<Character, Node> mNodes;
private final List<Edge> mEdges;
public DepthFirstSearch(Graph graph){
mNodes = graph.getNodes();
mEdges = new ArrayList<>(graph.getEdges());
for(Node node : mNodes.values()){
node.setVisited(false);
}
}
public void depthFirstSearch(Node source){
source.setVisited(true);
List<Node> neighbours = source.getNeighbours(mEdges);
for(Node node : neighbours){
if(!node.isVisited()){
System.out.println(node.getName());
depthFirstSearch(node);
}
}
}
И код getNeighbour:
public List<Node> getNeighbours(List<Edge> edges) {
List<Node> neighbours = new ArrayList<>();
for(Edge edge : edges){
if(edge.getFrom().equals(this)){
neighbours.add(edge.getTo());
}
}
return neighbours;
}
код Добавленная пытается идею Jager в:
public void depthFirstSearch(Node source){
source.setVisited(true);
List<Edge> neighbours = source.getNeighbouringEdges(mEdges);
for(Edge edge : neighbours){
if(!edge.getTo().isVisited()){
System.out.println(edge.getTo().getName());
depthFirstSearch(edge.getTo());
}else{
depthFirstSearch(edge.getFrom());
}
}
}
Каждый раз, когда возвращается рекурсивный вызов, он в основном «поднимается» к родительскому, который его вызывал. Рекурсия - это случай, когда очень полезно сесть с карандашом и бумагой и записать каждый шаг того, что происходит. – yshavit
Отправьте код для source.getNeighbours (mEdges); Это поможет нам понять, действительно ли вы получаете всех соседей. – attaboy182
включил весь код – spogebob92