У меня есть граф с городами в качестве узлов и класс Flight в качестве ребер.У каждого рейса есть время вылета, время прибытия, номер рейса и ряд дней, в течение которых он выполняется.Несколько ребер могут соединить каждую пару узлов, что делает график мультиграфом.Мне нужно ответить на вопрос: Каковы доступные рейсы из Place1 в Place2 в данный день с возможными переводами?
Следующие два метода используют поиск в глубину для поиска ираспечатайте ответ:
public static void printRoutes(String day,String source,String place1, String place2, boolean[] visited, LinkedList<Edge> Route,Grafo g) {
int index = hash.get(place1);
visited[index] = true;
if(place1.equals(place2))
if(isTransferable(day,Route,source))
writeRoute(Route,source);
if(place1 != place2) {
LinkedList<Edge> adjs = g.adjs_no(place1);
for(Edge a: adjs) {
if(!visited[hash.get(a.node_final)]) {
Route.add(a);
printRoutes(day,source,a.node_final,place2,visited,Route,g);
Route.remove(a);
}
}
}
visited[indice] = false;
}
public static void writeRoute(LinkedList<Edge> Route,String source) {
System.out.print(source + " -> ");
for (int i = 0; i < Route.size(); i++) {
System.out.print(Route.get(i).vertex_final() + " | Flight Number:");
System.out.print(Route.get(i).flight.flightNumber + " | Departure Time:" + Route.get(i).flight.departureTime);
System.out.println();
if(i != Route.size()- 1)System.out.print(Route.get(i).vertex_final() + " -> ");
}
System.out.println();
System.out.println();
}
isTransferable
проверяет, существует ли промежуток времени не менее 40 минут между прибытием и отправлением двух рейсов.
Я бы хотел ответить на этот вопрос, используя поиск в ширину вместо DFS, чтобы сначала появлялись более короткие поездки.Алгоритм, который я использую для BFS, не работает с мультиграфами.Есть ли способ выполнить BFS на этом графике, чтобы я мог успешно распечатать все возможные поездки между двумя городами в определенный день?