私は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;
}
追加コード:
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