완전 연결된 방향 그래프 G
이 있다고 가정 해 봅시다. 정점은 [a,b,c]
입니다. 각 꼭지점 사이에는 양방향으로 가장자리가 있습니다.그래프에서 '긴'단순한 비순환 경로를 모두 찾는 방법은 무엇입니까?
시작점이 a
인 경우 모든 방향으로 그래프를 탐색하고 이미 경로에있는 정점을 칠 때만 경로를 저장하고 싶습니다.
그래서, 기능 full_paths(a,G)
반환해야합니다
- [{a,b}, {b,c}, {c,d}]
- [{a,b}, {b,d}, {d,c}]
- [{a,c}, {c,b}, {b,d}]
- [{a,c}, {c,d}, {d,b}]
- [{a,d}, {d,c}, {c,b}]
- [{a,d}, {d,b}, {b,c}]
내가 [{a,b}]
또는 [{a,b}, {b,c}]
같은 '불완전한'결과를 필요가 없습니다를, 이미 첫 번째 결과에 포함되기 때문이다.
G의 powerset을 생성하고 특정 크기의 결과를 필터링하는 것 외에는 다른 방법이 있습니까?
어떻게 계산할 수 있습니까?
편집 : 에단이 지적한 바와 같이, 이것은이 백 트럭 전에 경로를 저장하고, 깊이 우선 탐색 방법으로 해결 될 수 있지만, 불행하게도 나는 그것을 수정하는 방법을 이해하지 않습니다 (I 구현 루비 Gratr를 사용 내 알고리즘)
Ethan, 나는 dfs에 대해 생각했지만 각 경로를 정확하게 기록 할 수있는 방법을 얻지 못했습니다. – skanatek
콜백 옵션과 [documentation for bfs] (http://rubydoc.info/gems/gratr/0.4.3/GRATR/Graph/Search:bfs)에 제시된 예를 살펴보십시오.콜백을 사용하여 가로 지르는 가장자리와 각 경로를 추적하기 위해 방문한 꼭지점을 추적 할 수 있습니다. – ethan