1
나는 감독 된 네트워크 문제를 해결하고 두 지점 사이의 모든 유효한 경로를 계산하려고합니다. 길이가 30 "여행"([출발지, 목적지] 쌍으로 표시)까지 경로를 볼 수있는 방법이 필요합니다.쌍으로 조합
route = [[start, city2], [city2, city3], [city3, city4], [city4, city5], [city5, city6], [city6, city7], [city7, city8], [city8, stop]]
이
지금까지 내 최고의 솔루션은 다음됩니다 과 같습니다 : 전체 경로는 다음이 쌍의 시리즈로 구성되어
: numRoutes 숫자가 거리를 대표하는 내 네트워크 그래프를 공급def numRoutes(graph, start, stop, minStops, maxStops):
routes = []
route = [[start, stop]]
if distance(graph, route) != "NO SUCH ROUTE" and len(route) >= minStops and len(route) <= maxStops:
routes.append(route)
if maxStops >= 2:
for city2 in routesFromCity(graph, start):
route = [[start, city2],[city2, stop]]
if distance(graph, route) != "NO SUCH ROUTE" and len(route) >= minStops and len(route) <= maxStops:
routes.append(route)
if maxStops >= 3:
for city2 in routesFromCity(graph, start):
for city3 in routesFromCity(graph, city2):
route = [[start, city2], [city2, city3], [city3, stop]]
if distance(graph, route) != "NO SUCH ROUTE" and len(route) >= minStops and len(route) <= maxStops:
routes.append(route)
if maxStops >= 4:
for city2 in routesFromCity(graph, start):
for city3 in routesFromCity(graph, city2):
for city4 in routesFromCity(graph, city3):
route = [[start, city2], [city2, city3], [city3, city4], [city4, stop]]
if distance(graph, route) != "NO SUCH ROUTE" and len(route) >= minStops and len(route) <= maxStops:
routes.append(route)
if maxStops >= 5:
for city2 in routesFromCity(graph, start):
for city3 in routesFromCity(graph, city2):
for city4 in routesFromCity(graph, city3):
for city5 in routesFromCity(graph, city4):
route = [[start, city2], [city2, city3], [city3, city4], [city4, city5], [city5, stop]]
if distance(graph, route) != "NO SUCH ROUTE" and len(route) >= minStops and len(route) <= maxStops:
routes.append(route)
return routes
[[0, 5, 0, 5, 7], [0, 0, 4, 0, 0], [0, 0, 0, 8, 2], [0, 0, 8, 0, 6], [0, 3, 0, 0, 0]]
시작 도시, 종료 도시 및 경로 길이 매개 변수.
거리는 경로가 실행 가능하고 routesFromCity가 연결된 각 노드에 연결된 노드를 반환하는지 확인합니다.
나는 더 많은 단계로 나아감에 따라 모든 경로를 생성하는 훨씬 더 효율적인 방법이 있다는 느낌이 들지만, 다른 어떤 것도 작동시키지 못합니다.
감사합니다. 이전에는이 방법을 사용하는 것에 가깝지만 중첩 된 for 루프를 바꾸는 방법이나 구조를 유지하는 방식으로 결과를 구성하는 방법을 알지 못합니다. – Will
@Will : 코드 예제를 포함하도록 답변을 업데이트했습니다. 그래프를 간단한 알고리즘을 기반으로하는 경로를 생성하는 간단한 함수로 대체했습니다. 대신 재귀 함수에 그래프를 전달해야합니다. –
이것은 완벽하지만 루프도 포함하고 싶습니다. 그래서 내가 2와 3 사이의 모든 경로를 원한다면 결과는 [2,3], [3,2], [2,3], [3,2], [2,3] [3,2]], [[2,3], [3,2], [2,3], [3,2], [2,3], [3,2] – Will