하나의 노드에서 다른 노드로의 경로 수를 반환하는 너비의 첫 번째 그래프 탐색을 구현하려고하지만 주어진 노드 수를 통해서만 시도합니다.주어진 깊이까지 너비 우선 그래프 너비를 구현하십시오.
예를 들어 노드 A, B, C, D, E의 목록이 주어진다면 A부터 D까지 얻을 수있는 여러 경로의 수를 알고 싶지만 경로에는 2 개 이상의 정류장이없는 경우에만 . A-B-D, A-E-D는 합격으로 간주되지만 A-B-E-D는 너무 많은 정류장이므로 응답은 2 경로가됩니다.
이 알고리즘을 구현하려고하지만 깊이를 추적 할 수있는 방법이 확실하지 않아 내 검색이 n 레벨만큼 깊게 진행됩니다.
여기 내 코드는 지금까지 작성했습니다. 문제는 searchNumPaths() 메서드에 있습니다.
public class PathSearch{
private int maxSearches;
private int pathCount;
private int numPaths;
private String node;
private ArrayList<ArrayList<String>> path;
ArrayList<Node> visited;
public PathSearch(int maxSearches, int pathCount) {
node = "";
this.maxSearches = maxSearches;
this.pathCount = pathCount;
path = new ArrayList<ArrayList<String>>();
visited = new ArrayList<Node>();
}
public int searchNumPaths(HashMap<String, Node> graph, Node startLocation, String endLocation, Queue<String> queue) {
//queue.add(startLocation.getLocation());
while(!queue.isEmpty()) {
node = queue.remove();
System.out.println("\n" + node +"\n");
for (Edge realPath: graph.get(node).getNeighbors()) {
node = realPath.getEndLocation();
System.out.println(node);
queue.add(node);
if (node.equals(endLocation)) {
numPaths++;
}
}
pathCount++;
if (pathCount>6){
break;
}
for (int i = 0; i<queue.size(); i++) {
searchNumPaths(graph, graph.get(queue.peek()), endLocation, queue);
queue.remove();
}
}
return numPaths;
}
public static void main(String[] args) throws IOException {
Train train = new Train();
Graph graph = new Graph(train.readFile("input.txt"));
LinkedList<String> queue = new LinkedList<String>();
queue.add("A");
PathSearch great = new PathSearch(10, 0);
HashMap<String, Node> map = graph.returnMap();
Node node = graph.returnMap().get("A");
String nodeTwo = graph.returnMap().get("C").getLocation();
//System.out.println(queue.remove());
System.out.println("Number of paths: " + great.searchNumPaths(map, node, nodeTwo, queue));
}
}
깊이를 저장하면 노드를 이동할 때마다 깊이를 다시 계산/업데이트해야합니다. (일부는 이것을 중복 된 지식으로 생각할 수도 있지만 아마도 큰 문제는 아닙니다) – byxor
문제는 노드의 깊이가 시작 및 끝 위치에 따라 변경된다는 것입니다. 또한 노드는 그들이 취하는 경로에 따라 스스로 도달 할 수 있어야합니다. 이것이 이러한 조건을 설명 할 수 있습니까? –
오, 어떻게 작동하는지 봅니다. 정말 고맙습니다. 난 그냥 이전 노드를 기반으로 다음 깊이를 증가 것입니다. –