奥行きの最初の検索は完全に機能しますが、サイクルは処理されません。私はDFSで1サイクルも印刷したい。奥行き最初の検索で1サイクル印刷
printAllPaths(VertexA, VertexC)
はこのようなものになるでしょう:
A B C D C //with cycle since C repeated
A B C
A D C
A D E B C
A E B C
コード
void printAllPathsUtil(Vertex v, Vertex d, ArrayList<Vertex> path){
v.state = VISITED;
path.add(v);
if (v == d) {
for (Vertex p : path) {
System.out.print("Print: " + p.value + " ");
}
System.out.println();
}
else {
for (Vertex city : v.outboundCity){
if (city.state == UNVISITED) {
printAllPathsUtil(city, d, path);
}
}
}
path.remove(v);
v.state = UNVISITED;
}
void printAllPaths(Vertex v, Vertex u){
clearStates();
ArrayList<Vertex> path = new ArrayList<>();
printAllPathsUtil(v, u, path);
}
下の頂点クラスは、このようなものです:
public class Vertex{
String value;
Vertex previous = null;
int minDistance = Integer.MAX_VALUE;
List<Vertex> inboundCity;
List<Vertex> outboundCity;
State state;
}
私たちは持っているべきではありません知っています無限に印刷する場合。しかし、1サイクルしか印刷しないでください。私は多くのことを試みたが、役に立たなかった。