Получение всех маршрутов в графе заданной длинны

Мне нужно найти и вывести все маршруты определенной длинны. Я примерно понимаю, как это должно работать, но вот при попытке реализовать ничего не получается. Собственно, то что я пытался реализовать:

На первое место поставить начальную вершину и вызвали рекурсивную функцию, которая ставит вершину на 2-е место и вызывает её, чтобы поставить вершину на 3-е место и т.д. до последнего места. Когда поставили на последнее местоб то маршрут получен и ставим другую вершину на то место (если можно). Когда вершины, которые можно поставить на последнее место закончатся, выходим из функции и попадаем в функцию, которая ставит вершину на предпоследнее место. После постановки новой вершины на предпоследнее место вызываем функцию для постановки вершины на последнее место и т.д.

Првильное ли это решение ? Или есть способы получше ? Подскажите пожалуйста, как это можно сделать ?

Собственно сам граф: Граф

def itisroutes(routes):  # передаем сюда список(возможный маршрут) и если это действительно маршрут возвращает True
    check = 0
    for i in range(len(routes)):
        select_route = int(routes[i])
        if i + 1 == len(routes):
            break
        next_route = int(routes[i + 1])
        if matrix[select_route][next_route] == 1:
            check += 1

    if check == len(routes) - 1:
        return True
    else:
        return False


def all_route(matrix, l=0, i=0, route=[]): # одна из неудачных попыток
    route.append(i)
    set_route = route.copy()
    index_j = - 1
    for i in range(matrix[i].count(1)):
        index_j = matrix[i].index(1, index_j + 1)
        route.append(index_j)
        if len(route) < l:
            all_route(matrix, l, index_j, route=route)
            route = set_route.copy()
        else:
            # print(route)
            print(route if itisroutes(route) else "#")
            route = set_route.copy()

"""Задаем граф"""
matrix = [
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    [],
    []
]
for i in range(len(matrix)):
    for j in range(len(matrix)):
        matrix[i].append(0)

matrix[0][1] = matrix[0][2] = matrix[0][5] = 1
matrix[1][0] = matrix[1][2] = matrix[1][8] = 1
matrix[2][0] = matrix[2][1] = matrix[2][3] = matrix[2][4] = 1
matrix[3][2] = matrix[3][4] = matrix[3][5] = matrix[3][6] = 1
matrix[4][2] = matrix[4][3] = matrix[4][8] = matrix[4][9] = 1
matrix[5][0] = matrix[5][3] = matrix[5][6] = 1
matrix[6][3] = matrix[6][5] = matrix[6][7] = 1
matrix[7][6] = 1
matrix[8][1] = matrix[8][4] = matrix[8][9] = 1
matrix[9][4] = matrix[9][8] = 1

set_length = 4 # желаемая длинна маршрута

all_route(matrix, set_length + 1)

Ответы (0 шт):