2015-04-22 1 views
0

Я использую вложенный словарь для обозначения вершин и ребер графовы, вроде:Неправильная рекурсивная функции, чтобы найти число возможных маршрутов

[ 
A: [B,D,E], 
B: [C], 
C: [D,E], 
D: [C,E], 
E: [B] 
] 

Это мой код до сих пор:

def number_of_trips(self, start_point, end_point, maxstops): 
    return self._find_path(start_point, end_point, 0, 0, maxstops) 

def _find_path(self, point_a, end_point, current_stops, routes, maxstops): 
    current_stops += 1 

    if current_stops > maxstops: 
     return routes 

    if end_point in self.digraph[point_a]: 
     return routes + 1 
    else: 
     for x in self.digraph[point_a]: 
      return self._find_path(x, end_point, current_stops, routes, maxstops) 

    return routes 

И этот метод называется так:

number_of_trips('C', 'C', 3) 

который выводит 1 вместо 2.

Что не так с моей рекурсивной функцией?

+0

Я думаю, вы должны как-то суммировать все маршруты из следующих рекурсии вместо ' возвратите' их. В ветке 'else' вы будете« возвращать »в свой первый« x », а не зацикливать все« self.digraph [point_a] ». – Luca

+0

Вы не обновляете значение «маршрутов» когда-либо! – hjpotter92

ответ

0

Проблема решена с помощью следующего кода:

def _find_path(self, point_a, end_point, current_stops, routes, maxstops): 
     current_stops += 1 

     if current_stops > maxstops: 
      return routes 

     if end_point in self.digraph[point_a]: 
      return 1 
     else: 
      for x in self.digraph[point_a]: 
       routes += self._find_path(x, end_point, current_stops, routes, maxstops) 

     return routes 
1

Increment значение routes когда рекурсивный вызов сделан:

return self._find_path(x, end_point, current_stops, routes + 1, maxstops) 
+0

Переменная маршрутов увеличивается только в случае полного маршрута между точками A и B –

Смежные вопросы